【发布时间】:2022-01-01 05:09:28
【问题描述】:
我有简单的文字。
然后我用Cipher RSA 加密这个文本。
但是,当使用Signature 加密文本验证此文本时,它总是返回 false。
生成密钥对:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair kp = keyPairGen.generateKeyPair();
纯文本:
byte[] plaintext = "a".getBytes(StandardCharsets.UTF_8);
使用 RSA 加密文本:
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
byte[] encryptText = cipher.doFinal(plaintext);
使用Signature验证数据:
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initVerify(kp.getPublic());
sig.update(plaintext);
boolean result = sig.verify(encryptText);
System.out.println(result);
为什么这段代码总是返回false?如何验证正确的方式?
【问题讨论】:
-
加密对应的不是验证而是解密。验证的对应物不是加密而是签名,这就是验证失败的原因。一方面加密和解密,另一方面签名和验证使用不同的填充。
-
我不太明白你的意思。请给我更多解释,关于我的代码@Topaco
-
加密/解密和签名/验证是不同的东西。您可以使用
Signature#verify()来验证使用Signature#sign()创建的签名。 -
哦,非常感谢。我现在明白了。
标签: java encryption cryptography digital-signature