首页 > 其他 > 详细

关于异或加密的二次加密

时间:2020-12-16 09:35:02      阅读:33      评论:0      收藏:0      [点我收藏+]

今天同事写了个中文的异或的加密算法,但是这个加密比较夸张的缺点是再次加密会返还成原来得数据,所以晚上想了个再进行一个逻辑位移操作

 

该方法可以对一个加密后的数据中的第0到第10位进行一次逻辑位移,逻辑位移的长度为11 & index 保证不会超过11

@Test
public void jiamiTest(){
String string = "张易方张易方张易方张易方张易方张易方"; //假设第一次异或加密后为张易方

Integer length = 11 ; //前十一位置需要移动
char en = (char)2047; // 0000011111111111

// 加密
char[] chars = string.toCharArray();
char[] newChars = new char[chars.length];
for (int i=0;i<chars.length;i++) {
char input = chars[i];
// input < ‘\uD080‘ || input > ‘\uDFFF‘ 保留11-15位置,0-10位置需要修改
Integer moveLength = (7 & i) + 1 ; // 位移长度
char flag = (char)(input >> length << length) ; //高位保持不懂
char enFlag = (char)(en & input); //取0-10位置的低位
newChars[i] =(char)(flag | (enFlag << moveLength & en) | (enFlag >>(length-moveLength)));
}
System.out.println(newChars); //幁恏旍娎扸晭塲揂捳岃悞掛尜擰擛壤搧曦

//解密 从newChars 解密到newInput
char[] newInput = new char[newChars.length];
for (int i=0;i<newChars.length;i++){
char input = newChars[i];

Integer moveLength = (7 & i) + 1;
char flag = (char)(input >> length << length) ; //高位保持不懂
char enFlag = (char)(en & input); //取0-10位置的低位
newInput[i] =(char)(flag | (enFlag << (length-moveLength) & en) | (enFlag >>moveLength));
}
System.out.println(newInput); //张易方张易方张易方张易方张易方张易方
}

  

关于异或加密的二次加密

原文:https://www.cnblogs.com/dadddd/p/14141773.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!