加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – HMACSHA1.ComputeHash()线程安全问题

发布时间:2020-12-16 07:35:21 所属栏目:asp.Net 来源:网络整理
导读:我问自己,在asp.net页面的代码隐藏中使用包含HMACSHA1实例的静态(共享)变量是否有危险.问题是当在同一个asp.net页面上处理多个同时请求时,所有asp.net worker-process’线程将使用相同的HMACSHA1实例. all(HMACSHA1)instance-和ComputeHash() – 由ComputeHa
我问自己,在asp.net页面的代码隐藏中使用包含HMACSHA1实例的静态(共享)变量是否有危险.问题是当在同一个asp.net页面上处理多个同时请求时,所有asp.net worker-process’线程将使用相同的HMACSHA1实例.
all(HMACSHA1)instance-和ComputeHash() – 由ComputeHash()使用/修改的方法变量将被所有线程共享(=可以修改)?这个假设是正确的吗?
因此,ComputeHash的返回值不能保证是正确的?!?!
因此我不允许在所有的asp.net-threads上使用静态/共享HMACSHA1实例.

我只是想知道你对这个问题的看法.

解决这个问题的唯一方法就是在ComputeHash()方法中使用关键路径等.但那是“我们无法接触到的”..

问候,
短剑的一种

解决方法

散列算法是确定性的,它们必须每次都为给定的输入返回相同的散列.

只要您每次使用相同的密钥,就不需要将它们设置为静态.但是,如果您使用无参数构造函数构造HMACSHA1实例,则它会生成随机密钥.您应该从KeyValue属性中获取随机值并将其与散列一起存储.

使用静态实例肯定是危险的.如果Thread1设置要计算的值,然后Thread2在Thread1调用ComputerHash()之前设置该值,则Thread1将获取Thread2值的散列值.如果任一线程正在设置密钥,则会发生相同的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读