我的程序将带有接收到的会话密钥的字符串加密(AES)发送给客户,以证明密钥是正确的。 客户端应对其进行解密,获取字符串并使用原始字符串进行验证。
程序运行正常。它加密和解密字符串。它打印我需要的字符串,但是当我做String.equals(字符串)时给我错误。 我可以弄明白为什么。 我的代码有加密部分:
// ----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
}
谢谢。
答案 0 :(得分:2)
第一部分是加密部分。 second 部分是解密部分。
第二部分是错误的。您正在解密仍然加密的缓冲区的最后一部分,而不是整个解密的ByteArrayOutputStream,
,并在此过程中提交大小错误。
String file_string = new String(b,"UTF-8");
应该是
String file_string = new String(os.toByteArray(), "UTF-8");