简单的加密/解密似乎不起作用,帮助我找到我做错的事

时间:2017-05-03 20:08:01

标签: java encryption

尝试进行简单的加密/解密,以便在简单的通信协议中使用它。 似乎我不能使我的解密方法工作,或者可能是加密方法,输出文本不是原始方法。 我做错了什么?

String s1 = encrypt("Hello World!");
String s2 = decrypt(s1);

public static String encrypt(String decStr) {
        byte[] key = new byte[]{
                92, -33, 70, 90, 42, -22, -76, 38,
                37, 109, 26, -113, 125, 105, 66, 81,
                17, 22, 21, -30, 87, -124, -85, 58,
                40, -116, -100, 28, 37, 127, 51, 36
        };

        byte[] encBytes = decStr.getBytes();

        int n = encBytes.length + 5;
        int k = key[encBytes.length % key.length] & 255;

        for (int i = 0; i < encBytes.length; i++) {
            encBytes[i] ^= key[(n + i) % key.length];
            encBytes[i] ^= key[(k + i) % key.length];
        }

        return new BigInteger(encBytes).toString(36);
}

public static String decrypt(String encStr) {
        byte[] key = new byte[]{
                92, -33, 70, 90, 42, -22, -76, 38,
                37, 109, 26, -113, 125, 105, 66, 81,
                17, 22, 21, -30, 87, -124, -85, 58,
                40, -116, -100, 28, 37, 127, 51, 36
        };

        byte[] encBytes = new BigInteger(encStr, 36).toByteArray();
        byte[] decBytes = Arrays.copyOfRange(encBytes, 1, encBytes.length);

        int n = decBytes.length + 5;
        int k = key[decBytes.length % key.length] & 255;

        for (int i = 0; i < decBytes.length; i++) {
            decBytes[i] ^= key[(n + i) % key.length];
            decBytes[i] ^= key[(k + i) % key.length];
        }

        return new String(decBytes);
}

1 个答案:

答案 0 :(得分:2)

byte[] decBytes = Arrays.copyOfRange(encBytes, 1, encBytes.length);

你是从第二个角色开始的。将1更改为0

byte[] decBytes = Arrays.copyOfRange(encBytes, 0, encBytes.length);
  

将指定数组的指定范围复制到新数组中。 范围的初始索引(from)必须介于0和original.length之间,包括在内。原始[from]的值被放入副本的初始元素中(除非来自== original)。长度或从==到)。原始数组中后续元素的值将放入副本中的后续元素中。范围(to)的最终索引(必须大于或等于from)可能大于original.length,在这种情况下,(byte)0放在索引大于或等于的副本的所有元素中到original.length - 来自。返回数组的长度为 - from。

method

此外,您正在创建一个新的字节数组,然后立即将其复制到第二个数组中,但从不使用原始数组。似乎没有必要首先执行此副本

测试:

Hello World!
zxj9kxukhtsdmoll41
Hello World!