Java 使用公钥进行数字签名
据我所知,数字签名是通过使用您自己的私钥和收件人的公钥加密(邮件摘要)获得的 在Java中,我不知道如何使用公钥执行签名的第二阶段Java 使用公钥进行数字签名,java,Java,据我所知,数字签名是通过使用您自己的私钥和收件人的公钥加密(邮件摘要)获得的 在Java中,我不知道如何使用公钥执行签名的第二阶段 Signature sig = Signature.getInstance("MD5WithRSA"); sig.initSign(privateKey); sig.update(data); byte[] signatureBytes = sig.sign(); 我检查了API,唯一使用公钥的方法是验证…消息签名中没有收件人。如果您想阻止其他人验证签名,可以将签
Signature sig = Signature.getInstance("MD5WithRSA");
sig.initSign(privateKey);
sig.update(data);
byte[] signatureBytes = sig.sign();
我检查了API,唯一使用公钥的方法是验证…消息签名中没有收件人。如果您想阻止其他人验证签名,可以将签名加密到收件人的公钥,但这通常不被视为邮件签名的一部分。没有使用收件人公钥加密数字签名的步骤;在这种情况下,它不是一个(通用的)数字签名,因为只有接收者才能解密(从而检查)它 因此,是的(不知道Java的细节),我并不奇怪API只提供了创建一个需要您的私有RSA密钥的函数,而收件人需要您的公共RSA密钥来检查您的签名,这是您提到的API的第二部分。您所说的“第二阶段”是什么意思,用私有密钥加密散列,还是验证签名 调用
update()
后,粘贴的代码已经为您提供了签名。签名对象已执行哈希(MD5)并使用私钥(RSA)加密
要验证签名,只需遵循公钥加密中描述的对称步骤:
- 私钥用于签名和解密/解密
- 公钥用于验证签名和加密/加密
密码。当然,要加密的不仅仅是您之前获得的签名,而是初始消息及其签名的串联。(我不确定只加密签名有什么意义。)