我试图在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;
}