gpt4 book ai didi

java - 解密后加密 (AES) 的字符串打印相同的值,但 equals() 上为 false

转载 作者:行者123 更新时间:2023-11-30 04:02:24 25 4
gpt4 key购买 nike

我的程序将使用收到的 session key 加密的字符串(AES)发送给客户端,以证明 key 是正确的。客户端应该解密它,获取字符串并与原始字符串进行验证。

程序运行良好。它对字符串进行加密和解密。它打印我需要的字符串,但当我执行 String.equals(string) 时给我错误。我能弄清楚为什么。我的代码有加密部分:

// ----create a challenge for Client (to check if the session key is correct)--------

public void sessionKeyVer(String challenge, File out) throws Exception{

aesCipher.init(Cipher.ENCRYPT_MODE, aeskeySpec); // switching mode for encryption

CipherOutputStream os = new CipherOutputStream(new FileOutputStream(out), aesCipher); //output stream to another file

os.write(challenge.getBytes("UTF-8"));// function to copy String to outputstream
os.close(); //close the stream

}

有解密部分:

public boolean sessionKeyVer(File file) throws Exception{
aesCipher.init(Cipher.DECRYPT_MODE, aeskeySpec); // switching mode for decryption

CipherInputStream is = new CipherInputStream(new FileInputStream(file), aesCipher); //output stream to another file
ByteArrayOutputStream os = new ByteArrayOutputStream();

int i;
byte[] b = new byte[1024];
while((i=is.read(b))!=-1) {
os.write(b, 0, i);
}

is.close();
os.close();
String file_string = new String(b,"UTF-8");
System.out.print(file_string);
return file_string.equals(challenge); //return false

}

谢谢。

最佳答案

第一部分是加密部分。 第二部分是解密部分。

第二部分是错误的。您正在解密仍然加密的缓冲区的最后一部分,而不是整个解密的 ByteArrayOutputStream,并在此过程中犯了尺寸错误。

String file_string = new String(b,"UTF-8");

应该是

String file_string = new String(os.toByteArray(), "UTF-8");

关于java - 解密后加密 (AES) 的字符串打印相同的值,但 equals() 上为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com