数字签名算法MD5withRSA

本文详细介绍了MD5withRSA数字签名的实现过程,包括使用Java的Signature API进行私钥签名和公钥验证。首先,通过RSA算法生成密钥对,然后使用MD5进行摘要运算。在签名过程中,私钥加密MD5摘要,公钥用于解密并对比原文的MD5摘要以验证签名的正确性。这种方法结合了RSA的非对称加密特性和MD5的摘要特性,确保了数据的完整性和来源的不可否认性。
摘要由CSDN通过智能技术生成

数字签名

  1. MD5withRSA,:将正文通过MD5数字摘要后,将密文 再次通过生成的RSA密钥加密,生成数字签名, 将明文与密文以及公钥发送给对方,对方拿到私钥/公钥对数字签名进行解密,然后解密后的,与明文经过MD5加密进行比较, 如果一致则通过
  2. 使用Signature的API来实现MD5withRSA

RSA原理:RSA算法基于一个十分简单的数论事实,将两个大素数相乘十分容易,但反过来想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA缺点:RSA的keysize位数越高,其产生密钥对及加密、解密的速度越慢,这是基于大素数非对称加密算法的缺陷。

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);

1、基于java的Signature API 的私钥签名

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
//初始化私钥
signature.initSign(privateKey);
//传入签名内容
signature.update(src.getBytes());
//生成签名
byte[] result = signature.sign();

通过Signature的getInstance获得MD5withRSA,然后使用signature的iniSign对私钥进行初始化,调用signature的update方法传入签名内容,最后调用signature的sign方法生成签名。

2、基于java的Signature API 的公钥验证

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("MD5withRSA");
//初始化公钥
signature.initVerify(publicKey);
//传入签名内容
signature.update(src.getBytes());
//核对签名
boolean bool = signature.verify(result);

通过signature的getInstance获取MD5withRSA,然后使用signature的iniVerify对公钥进行初始化,调用signature的update闯入需要校验的内容,最后调用signature的verify方法校验签名

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值