带有签名字节的java中的加密错误

时间:2018-03-14 12:22:38

标签: java encryption byte crypt

我试图在java中创建一对函数,必须使用crypts(第一个函数。)一个消息给出一个字节数组并解密它(第二个),通过使用字节和一个简单的加密算法,通过拾取将成为密钥的随机字节来简单地起作用,将密钥添加到消息的单个字节并将其附加到消息的末尾。它甚至使用了一个禁止字节的列表,它不能用作密钥,而是它的用途。问题是,我不知道为什么只有当密钥为负时它才起作用(例如:以47为密钥,它不能正确解密消息,但使用-68作为密钥)。 感谢。

public byte[] prohib = {33, 4, 15};

public byte[] Crypt(byte[] messTo) throws NoSuchAlgorithmException {
    if (messTo.length <= 2) {
        return messTo;
    } else {
        byte[] crypted = new byte[messTo.length + 1];

        byte[] key_arr = new byte[1];
        new Random().nextBytes(key_arr);
        byte key = key_arr[0];

        while (ifProhib(key)) {
            System.out.println("Prohib key: " + key);

            new Random().nextBytes(key_arr);
            key = key_arr[0];
        }
        System.out.println("CryptedKey == " + key);

        for (int i = 0; i < messTo.length; i++) {
            if ((crypted[i] = (byte) (messTo[i] + key)) > 127) {
                crypted[i] = (byte) (messTo[i] + key - 255);
            } else {
                crypted[i] = (byte) (messTo[i] + key);
            }
            crypted[crypted.length - 1] = key;
        }
        return crypted;
    }
}

public byte[] Decrypt(byte[] in) {

    if (in.length <= 2) {
        return in;
    } else {
        byte key = in[in.length - 1];
        byte[] decrypted = new byte[in.length - 1];

        System.out.println("DecryptedKey == " + key);
        for (int i = 0; i < decrypted.length; i++) {
            if (in[i] - key < -128) {
                decrypted[i] = (byte) (in[i] - key + 255);
            } else {
                decrypted[i] = (byte) (in[i] - key);
            }
        }
        return decrypted; //decrypted
    }
}

public boolean ifProhib(byte key) {
    for (int m = 0; m < prohib.length; m++) {
        if (key == prohib[m]) {
            return true;
        }
    }
    return false;
}

0 个答案:

没有答案