欢迎来到天天文库
浏览记录
ID:38737470
大小:32.50 KB
页数:3页
时间:2019-06-18
《应用JAVA进行密码加密的一种算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、BZ07应用JAVA进行密码加密的一种算法现在网络的很多功能都要求网络用户在进行注册后,登陆才有权使用。一般来说注册信息中都要包含用户名、密码、电子邮箱等内容。对于密码,一般要进行不可逆的加密存储,也就是说从密码可以演算到密文,但从密文不能够反演出密码。BZ071代码的功能及密码到密文的算法下面对代码每一部分功能及如何实现密文不能反演出密码的算法。Main()主方法的主要功能是输入密码,显示输入的密码,输出演算出的密文。演算密码的功能将在方法transf(charc,inti)和方法cryptograph(int[]n,inti)中实现。方法transf(charc)的功能是将
2、密码进行初步的转换,将密码中的每个字符分类并按照不同的类型将密码的每个字符的ASCII码加上一个干扰的偏移量,这里偏移量的取法为:若该为字符为“0”~“9”的数字则将其ASCII码加上数字1,若该为字符为“a”~“z”的数字则将其ASCII码加上数字2,若该为字符为“A”~“Z”的数字则将其ASCII码加上数字3。这将对反演密码带来一定的干扰。通过调用方法transf(charc)可以得到int[]类型的数组,其值为密码的ASCII码加上相应的偏移量。真正实现密文不能反演出密码的过程是通过方法cryptograph(int[]n,inti)来实现的。方法cryptograph(
3、int[]n,inti),主要实现了密文无法反演出密码的功能。主要算法如下:在处理第j(其含义见此方法中的变量j)位密码时对由方法transf(charc)算得的转译数组除第j个元素外的其他元素的值累加到int类型变量modnumber中;然后对变量modnumber进行校验,分析其是奇数还是偶数,根据分析结果再进行下一步的处理;(1)若modnumber为偶数则将对应位的密码移位3位小写英文字母,处理过程为,将转译数组的j个元素安位不带符号的右移4位(将原有内容进行隐藏)再加上变量modnumber,得到新的变量rightn,取变量rightn对25(英文字母共26个,将26
4、减去1)的余数加上97(小写英文字母a的ASCII码值),将得到的数值转换成字符放到密文的对应位置(由变量numch决定);(2)若modnumber为奇数,与(1)相同得到变量rightn的值,取变量rightn对9(阿拉伯数字共10个,将10减1)的余数加上48(阿拉伯数字0的ASCII码值),将得到的数值转换成字符放到密文的对应位置(由变量numch决定)。经过方法cryptograph(int[]n,inti)的处理后密文将很难再被演算成密码,因为在从密码演算密文的过程中已经将密码的一些信息丢弃。2用JAVA语言对算法的实现importjava.io.*;publicc
5、lassEncrypt{publicstaticvoidmain(Stringargs[]){intnch[]=newint[20];//密文中间变量intslong=0;//s的长度Strings;//存储密码(英文字符),密码长度不超过20个英文字符Stringcryp;//存放密文charch[]=newchar[20];//存放密码的每个字符BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));try{BZ07s=in.readLine();//获取密码slong=s.length();/
6、/获取字符串长度if(slong>20){slong=20;s=s.substring(0,20);//如果密码长度大于20个字符,只取前20个字符}System.out.println("s="+s);//显示输入的密码ch=s.toCharArray();//将密码付值给字符数组}catch(IOExceptione){System.out.println(e);}for(inti=0;i7、yp="+cryp);//输出密文}publicstaticinttransf(charc){//演算密文钥匙if(c>='0'&&c<='9'){returnc+1;}elseif(c>='a'&&c<='z'){returnc+2;}elseif(c>='A'&&c<='Z'){returnc+3;}elsereturnc;}publicstaticStringcryptograph(int[]n,inti){//演算密文intj;//用于循环intnumch=0;//数组ch[]中圆熟
7、yp="+cryp);//输出密文}publicstaticinttransf(charc){//演算密文钥匙if(c>='0'&&c<='9'){returnc+1;}elseif(c>='a'&&c<='z'){returnc+2;}elseif(c>='A'&&c<='Z'){returnc+3;}elsereturnc;}publicstaticStringcryptograph(int[]n,inti){//演算密文intj;//用于循环intnumch=0;//数组ch[]中圆熟
此文档下载收益归作者所有