java nonewithrsa,如何使“MessageDigest SHA-1和Signature NONEwithRSA”等同于“Signature SHA1withRSA”...

我有兴趣将带有RSA签名的SHA-1哈希应用于某些数据,但我需要分两步完成 – 首先应用哈希然后对数据进行签名. Signature.sign()函数似乎创建了一个最终签名的更复杂(ASN.1?)的数据结构(参见

this question).如何在不使用任何外部库(如BouncyCastle)的情况下制作两个等效文件?

使用签名应用哈希并签名:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);

...

sig = Signature.getInstance("SHA1withRSA", "SunMSCAPI");

sig.initSign(privatekey);

sig.update(data_to_sign);

byte[] bSignedData_CAPISHA1_CAPIRSA = sig.sign();

通过MessageDigest应用哈希,然后使用签名进行签名:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);

...

MessageDigest sha1 = MessageDigest.getInstance("SHA-1");

byte[] data_to_sign = sha1.digest(bdataToSign);

Signature sig = Signature.getInstance("NONEwithRSA", "SunMSCAPI");

sig.initSign(privatekey);

sig.update(data_to_sign);

byte[] bSignedData_JAVASHA1_CAPIRSA = sig.sign();

...

我正在寻找以下等价物:

bSignedData_JAVASHA1_CAPIRSA == bSignedData_CAPISHA1_CAPIRSA

我的最终目标是创建哈希,然后使用PKCS11令牌进行签名,但我要求签名数据与遗留数据的格式相同,以便进行验证.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SHA1withRSA是一种数字签名算法,它结合了SHA-1哈希算法和RSA加密算法。在使用SHA1withRSA签名和验证数据时,首先使用SHA-1对原始数据进行哈希计算,然后使用RSA私钥对哈希值进行加密,生成数字签名。在验证数字签名时,使用RSA公钥对数字签名进行解密,得到哈希值,再使用SHA-1对原始数据进行哈希计算,最后比较两个哈希值是否相等,以确定数字签名的有效性。 以下是使用Java代码进行SHA1withRSA签名和验证的示例: ``` import java.security.*; public class SHA1withRSAExample { public static void main(String[] args) throws Exception { // 生成RSA密钥对 KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair keyPair = keyGen.generateKeyPair(); // 待签名的数据 byte[] data = "Hello World".getBytes(); // 使用SHA-1对原始数据进行哈希计算 MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); byte[] hash = sha1.digest(data); // 使用RSA私钥对哈希值进行加密,生成数字签名 Signature signature = Signature.getInstance("SHA1withRSA"); signature.initSign(keyPair.getPrivate()); signature.update(hash); byte[] sign = signature.sign(); // 使用RSA公钥对数字签名进行解密,得到哈希值 signature.initVerify(keyPair.getPublic()); signature.update(hash); boolean verified = signature.verify(sign); if (verified) { System.out.println("Signature verified successfully."); } else { System.out.println("Signature verification failed."); } } } ``` 需要注意的是,SHA-1已经被认为是不安全的哈希算法,建议使用更安全的哈希算法,如SHA-256或SHA-512。同时,RSA密钥长度也应该足够长,建议使用2048位或更长的密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值