最近看了一部电影《模仿游戏》,《模仿游戏》中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用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. flume-1.6.0单节点部署

    这个不多说,直接上干货,部署很简单! 步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls ...

  2. [ERROR] InnoDB: Cannot allocate memory for the buffer pool

    :: mysqld_safe Starting mysqld daemon with databases from /data/mysqldb -- :: [Note] /usr/local/mysq ...

  3. 在octave语言中K-means聚类算法求聚类中心的向量化计算

    使用octave编程的时候,一定要注意使用向量化编程的思想,下面我就说说我今天做题遇到的一个K-means聚类问题,如何使用octave中的函数向量计算聚类中心centroids. octave几个函 ...

  4. Spring自学教程-AOP学习(五)

    Spring中的AOP 一.概述 (一)基本概念 1.什么是AOP?     面向方面编程.所谓方面即是指日志.权限.异常处理.事务处理等. 2.AOP的3个关键概念    (1)切入点(Pointc ...

  5. WKWebKit基础

    UIWebView & UIWebViewDelegate 这个两个东西在 WKWebKit 中被重构成 14 个类 3 个协议. WKWebKit Framework Classes WKB ...

  6. display属性及inline-block值(可用来布局)

    display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...

  7. 巧用HTML5给按钮背景设计不同的动画

      如何巧用HTML5设计按钮背景不同动画特效,在该特效中,当鼠标滑过按钮时,使用CSS3   animation 来动画   background-size  和  background-posit ...

  8. UDP传输包大小(转)

    源:UDP传输包大小 在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一 ...

  9. [项目回顾]基于Redis的在线用户列表解决方案

    迁移:基于Redis的在线用户列表解决方案 前言: 由于项目需求,需要在集群环境下实现在线用户列表的功能,并依靠在线列表实现用户单一登陆(同一账户只能一处登陆)功能: 在单机环境下,在线列表的实现方案 ...

  10. linux上编译安装python2.7.5

    下载python2.7.5,保存到 /data/qtongmon/software http://www.python.org/ftp/python/ 解压文件 tar xvf Python-2.7. ...