我正在尝试使用公共密钥解密字符串以与哈希进行比较。该代码是followig
byte[] dectyptedText = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
return dectyptedText;
上面的代码生成这样的字符串(base64encode)
MCEwCQYFKw4DAhoFAAQUy3qkZYgfRVo2Sv1F9bHa3pDs044 =
哈希由以下代码生成
byte[] key = stringToHash.getBytes();
MessageDigest md = MessageDigest.getInstance("SHA-1");
hash = md.digest(key);
上面的代码生成一个示例哈希,如下所示
y3qkZYgfRVo2Sv1F9bHa3pDs044 =
如果您发现两者都具有正确的哈希值y3qkZYgfRVo2Sv1F9bHa3pDs044 =但解密代码会生成并附加一个额外的MCEwCQYFKw4DAhoFAAQU
不明白这多余的东西是如何添加的以及为什么。
可以请别人对此有所启发吗?
谢谢
前级
您不应该Cipher
用来创建或验证签名。相反,您应该使用Signature.getInstance("SHA1withRSA")
。
签名方案和加密方案是不同的,它们不一定彼此兼容。首先,他们使用不同的填充方法,这些填充方法是算法安全性的一部分。
即使您可以使用Cipher进行签名验证工作,也有可能尚未完全验证签名,并且如果Cipher
正在实施的其他实现,则自制的签名验证方案可能(并且可能会)失败。用过的。
问题中的代码似乎使用PKCS#1 v1.5填充来加密而不是使用签名生成,因此它可能是不正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句