标签:移动 操作 加密算法 arp wchar 比较 void mit div
今天同事写了个中文的异或的加密算法,但是这个加密比较夸张的缺点是再次加密会返还成原来得数据,所以晚上想了个再进行一个逻辑位移操作
该方法可以对一个加密后的数据中的第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 = length & i ; // 位移长度 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 = length & i; 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); //张易方 }
标签:移动 操作 加密算法 arp wchar 比较 void mit div
原文地址:https://www.cnblogs.com/dadddd/p/14141773.html