最近看了一部电影《模仿游戏》,《模仿游戏》中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用Java实现一个简单的英格玛。

如若有人对英格玛感兴趣,可以阅读这篇博客https://www.0xaa55.com/forum.php?mod=viewthread&tid=1208&extra=page%3D1&page=1。

英格玛是将每一个字符变成ascii码进行加密变成另一个字符:

我这里实现的简单英格玛只是娱乐娱乐,主要实现原理是通过控制台输入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);
}

附:我有一个小想法就是结合这个简单的英格玛对验证码进行加密,这样的话有利于验证码的安全保护。

我这里实现的验证码是通过随机生成几位数字或者字母通过random()类,同样结合ascii码,话不多说直接上代码:

//生成随机数字和字母,
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;
}

然后通过英格玛方法进行加密那么只要将之前的英格玛方法中的控制台输入换成getStringRandom(4)生成的随机数。

注:刚开始写博客,对这个版本不是太了解,感觉好丑,求大神指导。

Java之英格玛简单实现以及加密验证码的应用的更多相关文章

  1. java代码实现简单的认证——图片验证码形式

    前言:认证在互联网中会经常见到,其主要作用是安全问题中防止恶意破解.刷票等.在系统开发中认证的实现也有很多种,什么手机短信认证,邮箱认证等.在这里我使用最基本的验证码的形式进行认证,下面例出过程. 验 ...

  2. JAVA中简单的MD5加密类(MD5Utils)

    MD5加密分析:   JDK API:   获取对象的API:   加密的API:   package cn.utils; import java.security.MessageDigest; im ...

  3. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  4. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  5. Java中的简单工厂模式

    举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...

  6. 简单实用的PHP验证码类

    一个简单实用的php验证码类,分享出来 ,供大家参考. 代码如下: <?php /** @ php 验证码类 @ http://www.jbxue.com */ Class code { var ...

  7. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  8. 用JAVA中BufferedImage画出漂亮的验证码点击变化

    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...

  9. 使用Z3破解简单的XOR加密

    使用Z3破解简单的XOR加密 翻译:无名侠 原文地址: https://yurichev.com/blog/XOR_Z3/ 如果我们有一段用简单XOR加密过的文本,怎么寻找密钥呢?密钥的长度可能很长, ...

随机推荐

  1. Spring MVC Json数据传递

    json是一种常见的传递格式,是一种键值对应的格式.并且数据大小会比较小,方便传递.所以在开发中经常会用到json. 首先看一下json的格式: {key1:value1,key2:value2} 每 ...

  2. sencha touch视频教程

    链接地址:http://v.youku.com/v_show/id_XOTI1MDg1ODQ4.html

  3. iOS开发——打包静态库与Framework

    最近老是需要做接口给别的客户,就顺便把打包的过程也写一下吧! 一.静态库 静态图里面只能是纯文件,里面不能再有第三方打包的静态库,也就是说,静态库不能打包静态库.这个用的比较多,一般自己公司写出来的东 ...

  4. PHP的几种排序算法的比较

    这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...

  5. FMDB事务的使用

    http://blog.csdn.net/qq_29892943/article/details/50541439 首先,说一下事务是什么,比如说我们有一个学生表和一个学生成绩表,而且一个学生对应一个 ...

  6. Mybatis 模糊查询 中文问题

    IDE编码:GBK ,换成UTF-8也不行! @Testpublic void testSearchStudents() {logger.info("查询学生(带条件)");Map ...

  7. LPC1768IAP(详解,有上位机)

    之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容) 首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他 ...

  8. FTP-使用记录

    1.磁盘配额不够用 Could not write to transfer socket: ECONNABORTED - 连接中止 452-Maximum disk quota limited to ...

  9. C语言-switch语句

    switch (表达式的值) { case 1: 语句1 break; case 2: 语句2 break; case 3: 语句3 break; case 4: 语句4 break; ...... ...

  10. Hibernate中sessionfactory和session的多线程问题

    http://blog.sina.com.cn/s/blog_7ffb8dd5010146i3.html