private String RailFenceCipher(String text,int key,boolean encry)
{
String spText="";
char[][] irText;
int row = 1;
int column = 1;
int k=0;
int j=0;
int i=0;
//รับ plaintext จากผู้ใช้เก็บไว้เป็นตัวแปรอาร์เรย์
char[] iText = new char[text.length()];
iText = text.toCharArray();
try {
//เข้าเงื่อนไขนี้ ถ้าต้องการเข้ารหัส
if(encry == true)
{
spText += "Plaintext = "+text;
spText += "\nKey = "+key;
//ถ้าความยาวของจำนวนอักขระเป็นเลขคี่
if(text.length()%key != 0) //check row
{
//ให้บันทึกความยาวของแถว และ คอลัมภ์โดยคิดด้วยการหารกับคีย์ที่ได้มา
//และเพิ่มคอลัมภ์ให้มีมากขึ้นอีกหนึ่งคอลัมภ์
row = key-1;
column =(text.length()/key) ;
} else {
//ให้บันทึกความยาวของแถว และ คอลัมภ์ โดยคิดด้วยการหารกับคีย์ที่ได้มา
row = key-1;
column = (text.length()/key)-1;
}
//ประกาศจำนวนแถวและคอลัมภ์ที่จะจัดเรียงและเข้ารหัส
irText = new char [row+1][column+1];
spText += "\nrow="+(row+1)+" column="+(column+1);
//วนตามจำนวนอักษรที่รับเข้ามา
k=0;
i=0;
j=0;
while(k<=text.length()-1)
{
//ถ้าแถวเกินให้ตั้งแถวใหม่และเปลี่ยนคอลัมภ์
if(i>row)
{
i=0;
j++;
}
//ถ้าคอลัมภ์เกินให้ตั้งคอลัมภ์ไปที่คอลัมภ์แรก
if(j>column)
{
j=0;
}
//นำค่าที่ได้จากการดึงอักษรที่มีมาเก็บไว้ในรูปแบบใหม่ที่ผ่านการเรียงแบบ Rail fence
irText[i][j] = iText[k];
//เพิ่มแถวและเพิ่มตัวชี้ลำดับอักษรที่ป้อนเข้ามา
i++;
k++;
}
spText += "\n\n";
//วนข้อมูลในการอ้างถึงอาร์เรย์โดยสิ้นสุดเมื่อวนครบซึ่ง คิดจาก แถวคูณคอลัมภ์
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1 และให้มีการเว้นบรรทัดด้วย
if(j>column)
{
j=0;
i++;
spText += "\n";
}
//แสดงอักษรตามการเรียงที่ละคอลัมภ์และทำการเพิ่มค่าหลักและเพิ่มค่าตัวนับอย่างละ 1
spText += "\t"+irText[i][j];
j++;
k++;
}
//แสดง ciphertext โดยเรียงตามแถว
spText += "\n\nCiphertext = ";
for(i=0;i<=row;i++)
for(j=0;j<=column;j++)
{
spText += ""+irText[i][j];
}
}
else //จะกระทำเงื่อนไขนี้ ก็ต่อเมื่อต้องการถอดรหัส
{
spText += "Ciphertext = "+text;
spText += "\nKey = "+key;
//ถ้าความยาวของจำนวนอักขระเป็นเลขคี่
if(text.length()%key != 0) //check row
{
//ให้บันทึกความยาวของแถว และ คอลัมภ์โดยคิดด้วยการหารกับคีย์ที่ได้มา
//และเพิ่มคอลัมภ์ให้มีมากขึ้นอีกหนึ่งคอลัมภ์
row = key-1;
column =(text.length()/key) ;
} else {
//ให้บันทึกความยาวของแถว และ คอลัมภ์ โดยคิดด้วยการหารกับคีย์ที่ได้มา
row = key-1;
column = (text.length()/key)-1;
}
//ประกาศจำนวนแถวและคอลัมภ์ที่จะจัดเรียงและถอดรหัส
irText = new char [row+1][column+1];
spText += "\nrow="+(row+1)+" column="+(column+1);
//วนตามจำนวนอักษรที่รับเข้ามา
i=0;
j=0;
k=0;
while(k<=text.length()-1)
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1
if(j>column)
{
j=0;
i++;
}
//ให้ตัวแปรอาร์เรย์เก็บค่าที่ป้อนเข้ามาตามการเรียงแบบแถว
//และทำการเพิ่มค่าคอลัมภ์และตัวนับ
irText[i][j] = iText[k];
j++;
k++;
}
spText += "\n\n";
//วนข้อมูลในการอ้างถึงอาร์เรย์โดยสิ้นสุดเมื่อวนครบซึ่ง คิดจาก แถวคูณคอลัมภ์
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1 และให้มีการเว้นบรรทัดด้วย
if(j>column)
{
j=0;
i++;
spText += "\n";
}
//แสดงตัวอักษรเรียงตามแถวและเพิ่มตัวนับ
spText += "\t"+irText[i][j];
j++;
k++;
}
//วนแสดงอาร์เรย์ทั้งหมดเพื่อแสดง ciphertext
spText += "\n\nCiphertext = ";
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวที่กำหนดให้เริ่มต้นที่แถว 0 ใหม่และเพิ่มคอลัมภ์อีกหนึ่ง
if(i>row)
{
i=0;
j++;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ็เริ่มต้นใหม่ที 0
if(j>column)
{
j=0;
}
//แสดงตัวอักษรที่ได้จากการถอดรหัส
spText += ""+irText[i][j];
i++;
k++;
}
}//else
} catch(Exception e) {
System.out.println(e);
}
return spText;
}
Jul 23, 2007
JAVA code with Rail fence algorithm
Labels:
Rail fence cipher
Subscribe to:
Post Comments (Atom)
Blog Comment
บทความที่ได้รับความนิยม
-
ราวสองปีก่อนผมและเพื่อนมีโอกาสเช่ารถมอเตอร์ไซค์เที่ยวที่อยุธยา ช่วงนั้นทุกอย่างยังดูดีและยังไม่เกิดเหตุการณ์น้ำท่วม ซึ่งถ้าต้องการดูก็หาจา...
-
เนื่องจากมีการคำนวณบางอย่างที่มีทศนิยมหลายตำแหน่ง ซึ่งการทำงานรายงาน หรือทำเว็บหรือโปรแกรมที่เกี่ยวข้องนั้น จำเป็นต้องศึกษา เรื่องของข้อมูลท...
-
วิธีการในเบื้องต้น ต้องทราบก่อนนะครับว่าระบบเราเป็นอย่างไร ของผมนั้น เป็น Huawei SmartAX MT880 จาก TT&T อยากให้กำหนดไว้ตามนี้นะครับ จากร...
-
งานว่าง ว่างงาน ได้เวลาของการ อัพเดต Blog ทริป เชียงคาน เกิดขึ้นไม่ได้เกี่ยวกับการตามหา นาธาน แต่อย่างใด แต่เกิดจากกระแส เสียงลือ เสียงเล่าอ...
-
ปัญหาที่ผมพบคือ Lenovo U460 ที่ผมพึ่งซื้อมาและลง Win7 มีอาการลดความสว่างของหน้าจอลงเอง ทำเอาผมรำคาญมาก คิดว่าหลายคนก็คงเคยพบปัญหานี้ ปัญหานี...
-
ก่อนจะไปยังส่วนอื่น ขอแนะนำสำหรับมือใหม่ที่ยังไม่รู้จัก Thunderbird Thunderbird เป็นโปรแกรมที่ใช้งานเกี่ยวกับการรับ E-mail ที่อยู่ใน Mail Se...
-
โดยปกติ ถ้าเราต้องการติดตั้งให้ มี Server ที่สามารถใช้รันภาษา PHP บนเครื่องได้ โดยทั่วไปนั้น สามารถใช้ Appserv ซึ่งเป็นโปรแกรมสำเร็จรูป เมื่...
-
เป็นครั้งแรกสำหรับผมที่จะมาเล่าประสบการณ์การท่องเที่ยว ในมุมมองของตัวเอง มีอะไรอยากแนะนำก็ได้เช่นเคย comment กันได้ที่ด้านล่าง ทริป เกาะช...
-
ทริปนี้ ออกเดินทางเมื่อ 2012/09/08 โดยรถส่วนตัว มีเพื่อนร่วมทริป ราวๆ แปดคนได้ เราออกเดินทางกันจริงๆ ราวๆ 10.00 AM บึ่งไปเรื่อยๆ ราวๆ สี...
-
ใครบ้างที่ไม่รู้จัก Microsoft SQL SERVER 2005 อ่ะนั่นแน่ ก็คงต้องมีมั่งล่ะเนาะ ผมเองก็เคยเป็นคนไม่รู้จัก อีกเช่นกัน เพราะไปวิ่งเล่น พัฒนาโดย...
No comments:
Post a Comment