Java之英格瑪簡單實現以及加密驗證碼的應用

最近看了一部電影《模仿遊戲》,《模仿遊戲》中艾倫·圖靈破譯英格瑪讓我對英格瑪產生了好奇,因而就開始翻閱資料對其進行研究,可是畢竟智慧有限,因此我這裏用Java實現一個簡單的英格瑪。php

如如有人對英格瑪感興趣,能夠閱讀這篇博客https://www.0xaa55.com/forum.php?mod=viewthread&tid=1208&extra=page%3D1&page=1。安全

英格瑪是將每個字符變成ascii碼進行加密變成另外一個字符:dom

我這裏實現的簡單英格瑪只是娛樂娛樂,主要實現原理是經過控制檯輸入Scanner cin=new Scanner(System.in); 而後進行讀取msg=cin.nextLine(); 而後將每個字符循環遍歷對其進行加26,爲了增長複雜性,對其進行判斷if((msg.charAt(i)-count)<'a') encodemsg+=(char)(msg.charAt(i)+26-count); else 
encodemsg+=(char)(msg.charAt(i)-count); 這樣就實現了一個簡單的英格瑪,其實也就是變更字符的ascii碼。

//具體方法實現
加密

static void encode()
{
String msg="";
String encodemsg="";
int count=0;
System.out.printf("%s","Input the message:");
Scanner cin=new Scanner(System.in); //控制檯輸入
msg=cin.nextLine(); //獲取控制檯的輸入的信息
for(int i=0;i<msg.length();i++) //循環遍歷信息的每個字符
{
System.out.println("msg = "+msg.charAt(i));
if((Character.isSpace(msg.charAt(i)))) //判斷字符是否爲空白字符
{
encodemsg+=" ";

}
else if((msg.charAt(i)-count)<'a') //判斷若是msg.charAt(i)-count的ascii碼小於a則+26

encodemsg+=(char)(msg.charAt(i)+26-count);

else
encodemsg+=(char)(msg.charAt(i)-count);

count++;



}
System.out.println(encodemsg);
}code

附:我有一個小想法就是結合這個簡單的英格瑪對驗證碼進行加密,這樣的話有利於驗證碼的安全保護。遊戲

我這裏實現的驗證碼是經過隨機生成幾位數字或者字母經過random()類,一樣結合ascii碼,話很少說直接上代碼:ci

//生成隨機數字和字母,
public static String getStringRandom(int length) {

String val = "";
Random random = new Random();

//參數length,表示生成幾位隨機數
for(int i = 0; i < length; i++) {
//判斷輸出的是數字仍是字母
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
//輸出字母仍是數字
if( "char".equalsIgnoreCase(charOrNum) ) {
//輸出是大寫字母仍是小寫字母
System.out.println(" n 2 = "+random.nextInt(2));
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val += (char)(random.nextInt(26) + temp);
} else if( "num".equalsIgnoreCase(charOrNum) ) {
val += String.valueOf(random.nextInt(10));
}
}
return val;
}get

而後經過英格瑪方法進行加密那麼只要將以前的英格瑪方法中的控制檯輸入換成getStringRandom(4)生成的隨機數。博客

注:剛開始寫博客,對這個排版不是太瞭解,感受好醜,求大神指導。驗證碼

相關文章
相關標籤/搜索