例如我已生成签名:
$ openssl rsautl -sign -inkey private_key.pem -keyform PEM -in data > signature
然后,如果我想验证它,我只是这样做:
$ openssl rsautl -verify -inkey public_key.pem -in signature -pubin
输出将是我在第一步编码的数据。
所以问题是,如何用Java实现这个验证? 我可以以某种方式或任何其他方式使用Signature类吗?
P.S。还有一个问题:据我所知,公钥不能用于解密rsa签名,但无论如何,在我的例子中它用于此。那么拥有公钥的任何人都可以解密我的消息吗?
由于
答案 0 :(得分:1)
显然LSTM
使用相当于rsaautl
签名方案,其中输入数据按原样被采用(假设为散列或短(长度<&lt; N))
签名验证:
NONEwithRSA
如果数据较长(例如长于公共密钥/散列长度),我建议使用散列签名,例如:
Signature signature = Signature.getInstance("NONEwithRSA");
signature.initVerify(pubKey);
signature.update(data);
boolean verified = signature.verify(signatureBytes);
通过Java验证
openssl dgst -sha256 -sign private.pem data.txt | base64