当前位置: 首页 > news >正文

MD5加密返回32位密文字符串

前言:

项目中需要调用其他系统的 api 接口,接口使用的是按一定规则生成 MD5 密文作为签名来进行身份验证,本文仅记录 32 位 MD5 密文的生成方式,仅供参考。

什么是MD5 加密?

MD5 加密是一种加密算法,MD5 加密算法被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致,同时 MD5 加密是一种不可逆的加密算法,不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样加密算法处理,得到相同的密文被系统重新识别后,才能真正解密。

对方系统签名规则:

1、构造签名因子:将Headers除"sign"外的所有参数按key进行字!典升序排列。
2、构造签名因子:将第1步中排序后的参数(key=value)用&拼接起来。
2、对构造的签名因子执行md5_32位算法,sign=uppercase (md5_32(s))得到签名。

生成 MD5 签名规则的工具类:

@Slf4j
public class MD5Utils {/*** @Description: MD5 加密* @Date: 2024/4/3 13:38*/public static String md5Encrypt(String plainText) {String cipherText;try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(plainText.getBytes());byte[] bytes = md.digest();int i;StringBuilder buf = new StringBuilder();for (byte aByte : bytes) {i = aByte;if (i < 0) {i += 256;}if (i < 16) {buf.append("0");}buf.append(Integer.toHexString(i));}cipherText = buf.toString();} catch (NoSuchAlgorithmException e) {log.error("MD5 加密失败,失败原因:", e);throw new BusinessException("MD5 加密失败");}return cipherText;}/*** @Description: 排序并构造参数* @Date: 2024/4/3 13:57*/public static String formatParam(Map<String, String> param) {String params;try {List<Map.Entry<String, String>> itmes = new ArrayList<>(param.entrySet());//对所有传入的参数按照字段名从小到大排序//Collections.sort(items); 默认正序//可通过实现Comparator接口的compare方法来完成自定义排序itmes.sort(Map.Entry.comparingByKey());/*Collections.sort(itmes, new Comparator<Map.Entry<String, String>>() {@Overridepublic int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {return (o1.getKey().toString().compareTo(o2.getKey()));}});*///构造key=value键值对的形式StringBuilder sb = new StringBuilder();for (Map.Entry<String, String> item : itmes) {if (StringUtils.isNotBlank(item.getKey())) {sb.append(item.getKey()).append("=").append(item.getValue());sb.append("&");}}params = sb.toString();if (!params.isEmpty()) {params = params.substring(0, params.length() - 1);}} catch (Exception e) {log.error("sign 签名构造失败,失败原因:", e);throw new BusinessException("sign 签名构造失败");}return params;}
}

如有错误的地方欢迎指出纠正。

http://www.lryc.cn/news/332080.html

相关文章:

  • npm常用命令技巧
  • intellij idea 使用git撤销(取消)commit
  • 【计算机网络】四层负载均衡和七层负载均衡
  • IP-guard WebServer 任意文件读取漏洞复现
  • 【IoTDB 线上小课 01】我们聊聊“金三银四”下的开源
  • 2024053期传足14场胜负前瞻
  • C语言------冒泡法排序
  • C#(C Sharp)学习笔记_Enum枚举类型【十三】
  • 乐知付-如何制作html文件可双击跳转到指定页面?
  • 电工技术学习笔记——直流电路及其分析方法
  • 详解python中的迭代
  • 机器学习模型——集成算法(三)
  • 企业微信企业主体变更认证介绍
  • 如何降低AI功耗? —— 超低功耗的仿生硬件
  • 原型模式详解
  • 嵌入式开发中状态模式实现
  • 目标检测——车牌数据集
  • FOC算法中为啥用PWM触发ADC中断
  • 2024.4.5学习记录————嵌入式学习内容
  • k8s 部署 canal 集群,RocketMQ 模式
  • Android+OnnxRuntime+Opencv+Onnx模型操作图片擦除多余内容
  • 【CANoe】CAPL_E2E测试-验证报文中的CRC值是否正确
  • Linux云计算之网络基础8——IPV6和常用网络服务
  • 页面刚加载的时候显示自己定义的{{***}}然后一闪而过
  • python批量转化pdf图片为jpg图片
  • 玫瑰图和雷达图(自备)
  • 动态规划基础
  • kubeadm部署的k8s1.29集群证书更新
  • 【A 类比赛】大学生学科竞赛智慧应用场景题目大全
  • Yarn的安装和使用(2):使用及问题解决