วันนี้ผมมี แนวคิดการเข้ารหัสและถอดรหัสมาฝากนะครับ
เป็นโปรแกรมที่ผมพัฒนาขึ้นมาเองนะครับ สำหรับภาษาที่ใช้ก็คือ ภาษาจาวานะครับ
เป็น Java windows application เครื่องมือที่ใช้ในการพัฒนาคือ
NetBeans IDE 5.5.1 นะครับ
งานนี้เริ่มต้นขึ้นได้เพราะเป็นการบ้านที่ต้องทำส่งในรายวิชา Computer Security
ที่ผมกำลังเรียนอยู่ อาจารย์ก็เลยให้โจทย์ และให้งานมาทำนะครับ
ผมคิดว่าจะทยอยเอา ส่วนที่เป็นหัวใจหลักของโปรแกรมมาแสดงไว้ที่นี่นะครับ
ว่าลักษณะการเขียนโปรแกรมของผมนั้น ถูกต้อง ดีแล้วหรือยัง
อย่างไรก็ตาม ขอบคุณสำหรับเพื่อนๆ ทุกคนที่ช่วยอธิบายแนวคิดให้ผม
จนสามารถนำมาเปิดเผย เพื่อให้บุคคลที่สนใจได้ศึกษาต่อไปด้วย
ซึ่งสำหรับผู้สนใจท่านใดยังไม่เข้าใจในแนวคิดหรือกระบวณการทำงานของโปรแกรม
สามารถแสดงความคิดเห็นมาได้ทันทีนะครับ
สำหรับ Code ที่เป็นแบบ Visual Basic .Net
ลองดูได้ที่เว็บพี่เดช นะครับ
เป็นโปรแกรมที่ผมพัฒนาขึ้นมาเองนะครับ สำหรับภาษาที่ใช้ก็คือ ภาษาจาวานะครับ
เป็น Java windows application เครื่องมือที่ใช้ในการพัฒนาคือ
NetBeans IDE 5.5.1 นะครับ
งานนี้เริ่มต้นขึ้นได้เพราะเป็นการบ้านที่ต้องทำส่งในรายวิชา Computer Security
ที่ผมกำลังเรียนอยู่ อาจารย์ก็เลยให้โจทย์ และให้งานมาทำนะครับ
ผมคิดว่าจะทยอยเอา ส่วนที่เป็นหัวใจหลักของโปรแกรมมาแสดงไว้ที่นี่นะครับ
ว่าลักษณะการเขียนโปรแกรมของผมนั้น ถูกต้อง ดีแล้วหรือยัง
อย่างไรก็ตาม ขอบคุณสำหรับเพื่อนๆ ทุกคนที่ช่วยอธิบายแนวคิดให้ผม
จนสามารถนำมาเปิดเผย เพื่อให้บุคคลที่สนใจได้ศึกษาต่อไปด้วย
ซึ่งสำหรับผู้สนใจท่านใดยังไม่เข้าใจในแนวคิดหรือกระบวณการทำงานของโปรแกรม
สามารถแสดงความคิดเห็นมาได้ทันทีนะครับ
สำหรับ Code ที่เป็นแบบ Visual Basic .Net
ลองดูได้ที่เว็บพี่เดช นะครับ
private String shiftCipher(String text,int key,boolean encry) {
String spText="";
int index = 0;
int num = 0;
//กำหนดค่าให้กับตัวแปรเพื่อเป็น plaintext ทั้งหมดที่อนุญาติให้เข้ารหัสและถอดรหัส
char[] pText = new char[180] ;
try{
//A=>z 94
for (int i=32; i<=126; i++) {
pText[i-32] = (char)i;
}
//ก=>ฮ 58
for (int i=160; i<=218; i++) {
pText[i-160+94] = (char)i;
}
//0=>9 28
for (int i=223; i<=251; i++) {
pText[i-223+94+58] = (char)i;
}
}catch(Exception e){System.out.println(e);}
//รับข้อความ plaintext ที่ได้จากผู้ใช้โปรแกรมเก็บไว้ในตัวแปร
char[] iText = new char[text.length()];
try{
text = new String(text.getBytes("TIS-620"),"ISO8859_1");
} catch(java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
iText = text.toCharArray();
//กำหนดจำนวนที่มีของ plaintext
int maxChar = pText.length-1 ;
//วนเก็บค่าไปยังชุดข้อมูลใหม่โดยให้มีการ shift เกิดขึ้นตาม key ที่รับมา
//โดยที่ถ้าตัวลำดับที่อ้างถึงน้อยกว่าหรือเท่ากับจำนวนทั้งหมดของ plaintext ให้เข้าเงื่อนไขนี้
num = 0;
char[] xText = new char[pText.length];
while(num <= maxChar) {
//ให้ตัวชี้มีค่าตาม Key
index = num+key;
//ถ้าวนจนตัวชี้เกินค่ามากที่สุดของชุดข้อมูลให้ทำการ
//นำค่าที่มีลบออกด้วยค่าที่มากที่สุดของชุดข้อมูล
//ดังนั้นก็จะสามารถนำข้อมูลเข้ากล่องข้อมูลกล่องแรกได้ และถัดต่อไปเรื่อยๆ
if(index > maxChar) {
index = index - pText.length;
}
//เก็บค่าข้อมูลที่มีการ Shift แล้ว
xText[num] = pText[index];
num++;
}
//ถ้าผู้ใช้ต้องการเข้ารหัสจะเข้าเงื่อนไขนี้
if(encry == true) {
spText += "Plaintext = "+text+"\n";
spText += "key = "+key+"\n\n";
//แสดง plaintext ทั้งหมดที่หน้าจอ
num = 0;
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
spText += "\n";
//แสดง plaintext ที่ผ่านการ shift ตาม key
for(int i=0; i<= maxChar; i++) {
spText += xText[i]+" ";
}
spText += "\n";
spText += "\nEncryption Algorithm :: C_i = E(P_i) = P_i + key";
//แสดงการเข้ารหัส
spText += "\nCiphertext = ";
for(int j=0; j<iText.length; j++)
for(int i=0; i<=maxChar; i++) {
//ถ้าวนมาเจออักษร plaintext ที่กำหนดไว้ในโปรแกรมและ
//ตรงกับอักษรที่รับเข้าไปก็ให้นำอักษรที่มีลำดับตรงกันแสดงทางหน้าจอ
//โดยที่อักษรดังกล่าวนั้นได้ผ่านการ shift ไว้แล้ว
if(pText[i] == iText[j]) {
spText += xText[i];
}
}
} else //ถ้าผู้ใช้ต้องการถอดรหัส จะเข้าเงื่อนไขนี้
{
spText += "Ciphertext = "+text+"\n";
spText += "key = "+key+"\n\n";
//แสดงอักษรที่มีการ shift แสดงที่หน้าจอ
for(int i=0; i<=maxChar; i++) {
spText += xText[i]+" ";
}
spText += "\n";
//แสดงอักษรที่ไม่มีการ shift ซึ่งเป็น plaintext ทั้งหมด
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
//แสดงอักษร plaintext ที่มาจากการรับค่าและผ่านการถอดรหัส
spText += "\n\nPlaintext = ";
for(int j=0; j<iText.length; j++)
for(int i=0; i<=maxChar; i++) {
//ถ้าค่าที่รับเข้ามาตรงกับค่าที่ถูก shift แล้ว
//ให้แสดงตัวอักษร plaintext ที่ยังไม่ผ่านการ shift
if(iText[j] == xText[i]) {
spText += pText[i];
}
}
}
try{
spText = new String(spText.getBytes("ISO8859_1"),"TIS-620");
} catch(java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
return spText;
}
ช่ายอย่างที่พี่พูดครับ
ReplyDeleteที่ว่า ไม่ชอบการชนะโดยไม่ได้พยายาม เลย