一个简单的加密(java语言实现)

加密,从大的方向来讲分为两类,即隐文和替换。

隐文 就是将密码隐藏起来,让人不能轻易发现,比如 中国的字谜便是经典的隐文术,将密文隐藏于一句看上去有点不知所谓的文字中。

替换从字面意思便可知道,就是将密文 替换成其他的约定的字符,莫尔斯密码是典型的替换密码,将字母用‘.’和‘-’代替。

我要讲的加密只用了隐文,加密原理非常简单,

首先是将密码变成双栏密码。将密文通过奇偶拆分成双栏然后重组。

    双栏密码实例

     通过如下代码可以将密文加密成双栏密码

<span style="white-space:pre">		</span>//获取密码的长度
		int leng=pwd.length();
		String dan="";//奇数
		String shuang="";//偶数
		String secret="";//加密后的密文
		for(int i=1;i<leng+1;i++){
			if(i%2!=0){
				dan +=pwd.substring(i-1,i);
			}else{
				shuang+=pwd.substring(i-1, i);
			}
然后在得到的奇数和偶数之间加入一些无意义的字符,可以提高安全性。

以下为生存随机字符的方法:

/***
	 * 得到指定长度的随机数字和字母的字符串
	 * @param char1
	 * @param char2
	 * @param len
	 * @return
	 */
	public static String getMultiStr(int len){
		String str="";
		for(int i=0;i<len;i++){
			int j=1+(int)(Math.random()*3);//随机得到1-3的数
			switch (j) {
			case 1:
				str+=(char)('0'+Math.random()*('9'-'1'+1));//随机的到0-9之间的数
				break;
			case 2:
				str+=(char)('a'+Math.random()*('z'-'a'+1));//随机得到a-z之间的字符
				break;
			default:
				str+=(char)('A'+Math.random()*('Z'-'A'+1));//随机的到A-Z之间的字符
				break;
			}
		}
		return str;
	}
通过得到随机字符将密文加密,比如:
    secret=getMultiStr(3)+shuang(偶数位)+getMultiStr(4)+dan(奇数位)+getMultiStr(5);

另发一个解密方法用于测试:
	/***
	 * 密文解密成原码
	 * @param 密文
	 * @return 原码
	 */
	public static String restorePwd(String secret){
		//密文长度
		int leng=secret.length();
		String dan="";//单数
		String shuang="";//双数
		String pwd="";//解密后的密码
		//如果密文长度为双数,原码为双数
		if(leng%2==0){
			int i=(leng-12)/2;
			shuang=secret.substring(3, 3+i);
			dan=secret.substring(leng-5-i,leng-5);
		}else{
			int i=(leng-12+1)/2;
			shuang=secret.substring(3,3+i-1);
			dan=secret.substring(leng-5-i,leng-5);
		}
		String ToPwd=dan+shuang;//双栏密文
		int p=ToPwd.length();//双栏密文的长度
		int pp=0;
		if(p%2==0){
			pp=p/2;
			for(int i=1;i<pp+1;i++){
				pwd+=ToPwd.substring(i-1, i)+ToPwd.substring(i-1+pp,i+pp);
			}
			
		}else{
			pp=(p+1)/2;
			for(int i=1;i<pp;i++){
				pwd+=ToPwd.substring(i-1, i)+ToPwd.substring(i-1+pp,i+pp);
			}
			pwd+=ToPwd.substring(pp-1,pp);
		}
		return pwd;
	}

事实证明,加密方法比解密方法更容易地多,我在测试时没用到过解密,但还是发出来,和大家交流学习


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值