码迷,mamicode.com
首页 > 其他好文 > 详细

关于异或加密的二次加密

时间:2020-12-21 11:26:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:移动   操作   加密算法   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!