Java之英格玛简单实现以及加密验证码的应用
最近看了一部电影《模仿游戏》,《模仿游戏》中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用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之英格玛简单实现以及加密验证码的应用的更多相关文章
- java代码实现简单的认证——图片验证码形式
前言:认证在互联网中会经常见到,其主要作用是安全问题中防止恶意破解.刷票等.在系统开发中认证的实现也有很多种,什么手机短信认证,邮箱认证等.在这里我使用最基本的验证码的形式进行认证,下面例出过程. 验 ...
- JAVA中简单的MD5加密类(MD5Utils)
MD5加密分析: JDK API: 获取对象的API: 加密的API: package cn.utils; import java.security.MessageDigest; im ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- Java中的简单工厂模式
举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...
- 简单实用的PHP验证码类
一个简单实用的php验证码类,分享出来 ,供大家参考. 代码如下: <?php /** @ php 验证码类 @ http://www.jbxue.com */ Class code { var ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- 用JAVA中BufferedImage画出漂亮的验证码点击变化
如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...
- 使用Z3破解简单的XOR加密
使用Z3破解简单的XOR加密 翻译:无名侠 原文地址: https://yurichev.com/blog/XOR_Z3/ 如果我们有一段用简单XOR加密过的文本,怎么寻找密钥呢?密钥的长度可能很长, ...
随机推荐
- iOS navigationBar 的isTranslucent属性
苹果文档: A Boolean value indicating whether the navigation bar is translucent (YES) or not (NO). The de ...
- Linux环境变量相关文件
执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/ ...
- 使用STM8SF103 ADC采样电压(转)
源:使用STM8SF103 ADC采样电压 硬件环境: STM8SF103 TSSOP20封装 因为项目需要用到AD采样电池电压,于是便开始了使用STM8S ADC进行采样,也就有了下文. 手册上对S ...
- java中基本类型占用字节数
之前一直使用c/c++开发c中各种类型占用的位数和java还是有区别的,特地找了篇文章过来对比下. 在处理网络协议的时候需要注意 在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种 ...
- mysql 5.5中文乱码问题
一.登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:+--------------------------+----------------- ...
- Variation of e.touches, e.targetTouches and e.changedTouches
We have the following lists: touches: A list of information for every finger currently touching the ...
- 在vhd中安装win7,并建立分差vhd
准备:硬盘分区激活第一个分区; imagex.exe; install.wim; winpe boot pc 1.cmd命令下,创建主vhd (1)diskpart (打开dis ...
- curl远程传输工具
/** * curl远程传输工具 */ public function post_curl($url,$body,$header,$type='POST'){ $ch = curl_init(); c ...
- PHP新手之学习类与对象(3)
四.访问控制 对属性或方法的访问控制,是通过在前面添加关键字 public.protected 或 private 来实现的.由 public 所定义的类成员可以在任何地方被访问:由 protecte ...
- win10新特性,ubuntu子系统(安装及配置)
最新版win10下可以直接跑ubuntu镜像,直接入正题. 这里如果你没有可能是你的版本不是最新的,我这里是最新的win10直接是有这个功能的.勾选后会要求重启,确定即可. 然后win键弹出搜索,输入 ...