MessageDigest 使用注意,并发问题

在开发中遇到并发请求时MD5校验错误的问题。由于MessageDigest实例作为成员变量,多个线程共享导致并发计算错误。MD5工具类未正确重置MessageDigest,线程间状态交错影响计算结果。解决方案是确保每个线程拥有独立的MessageDigest实例或在使用后及时reset。
摘要由CSDN通过智能技术生成

说一下最近在开发过程中遇到加密相关的问题,先引用一段MD5的解释。

百度百科 MD5

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

需求:每次请求对请求体进行MD5值计算,服务端做验证并响应(虽然此功能并没什么用,但是需求提出来了,就是要做)。

开发:因为这些常用的工具类之前都写好了,用的时候没有多想就直接Copy过来了,请求是并发的,刚刚开始的时候,并发请求较少(1-2)个,没有出现什么问题,后来请求3-4个同时发的时候,服务端偶尔抛出MD5值验证错误的信息,后来翻看了MD5工具类之后才发现,原来这个类写的方式并不支持并发,MessageDigest被声明为成员变量,多线程环境下会共享同一个MessageDigest对象,为什么共享它在并发情况会出问题呢?

查看MessageDigest源码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值