MD5数字签名算法:生成签名和验签(附代码)

一.背景

   为了增加接口的安全性(防止中间人攻击),现增加签名算法。此算法参考微信支付中的签名算法,由于该签名针对前后端,采用了对称算法,如后续接口供给多家第三方接口使用可采用非对称算法。大致整理文档供后续开发人员使用阅读。

二.  签名生成步骤

①设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

注意如下规则:

◆参数名ASCII码从小到大排序(字典序);

◆如果参数的值为空不参与签名;

◆参数名区分大小写;

◆验证调用返回或主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

②在stringA最后拼接上key(密钥)得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MD5算法本身并不用于数字签名,而是用于生成消息摘要。数字签名是通过使用非对称加密算法(如RSA)来实现的。下面是一个使用MD5算法生成消息摘要,并使用RSA算法进行数字签名的示例代码: ```java import java.security.MessageDigest; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; public class MD5WithRSA { public static void main(String[] args) throws Exception { // 生成RSA密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); // 待签名的数据 String data = "Hello, world!"; // 使用MD5算法生成消息摘要 MessageDigest md5Digest = MessageDigest.getInstance("MD5"); byte[] digest = md5Digest.digest(data.getBytes()); // 使用私钥进行数字签名 Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(privateKey); signature.update(digest); byte[] signatureBytes = signature.sign(); // 使用公钥进行 signature.initVerify(publicKey); signature.update(digest); boolean verified = signature.verify(signatureBytes); System.out.println("数字签名证结果: " + verified); } } ``` 这段代码首先生成了一个RSA密钥对,然后使用MD5算法生成消息摘要,接着使用私钥进行数字签名,最后使用公钥进行。请注意,这只是一个简单的示例,实际应用中还需要考虑更多的安全性和实现细节。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值