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)生成的随机数。博客

注:刚开始写博客,对这个排版不是太了解,感受好丑,求大神指导。验证码

相关文章
相关标签/搜索