我编写了一段代码,但我无法解释为什么它的表现不应该如此。我知道这听起来很傻,但事实并非如此。
boolean verify = EDV.verifySignature(signature, cipherText,
SERVER_PUBLIC_KEY);
out.println("Validity " + verify);
if (verify) {
// //message is authentic
String decryptedMessage = EDV.decrypt(cipherText,
SERVER_PRIVATE_KEY);
out.println("Message : " + decryptedMessage);
}else
{
out.println("Signature did not match");
}
这是一个简单的代码,用于验证签名,然后在签名有效时解密邮件(验证为真)
此代码的输出为:
Validity false
Signature did not match
邮件解密就好了。
问题是签名应该验证(我已经检查了签名,cipherText和密钥n次)。这是踢。
几乎相同的代码
boolean verify = EDV.verifySignature(signature, cipherText,
SERVER_PUBLIC_KEY);
out.println("Validity " + verify);
// if (verify) {
// //message is authentic
String decryptedMessage = EDV.decrypt(cipherText,
SERVER_PRIVATE_KEY);
out.println("Message : " + decryptedMessage);
// }else
// {
// out.println("Signature did not match");
// }
和Voila !,输出就像我希望的那样,应该如此。
Validity true
Message : This is a sample Text
而且,第一个代码在Eclipse上运行得很好,但是在JAVA servlet上运行它是唯一一次得到它。 此外,第一次运行代码#2时,它会给出错误但在此之后它会给出真的。
我似乎无法解释原因。
链接
Code#2(运行此代码,它给出了错误的有效性,刷新它并且它变为真)
答案 0 :(得分:1)
在您提供的示例之前,代码中的某些内容未正确初始化。尝试为签名,cipherText和SERVER_PUBLIC_KEY参数添加一些测试println语句。
另外,检查EDV.verifySignature的初始化。