我问自己在asp.net页的代码隐藏中使用包含HMACSHA1实例的静态(共享)变量是否会很危险。问题是当在同一个asp.net页上处理多个同时请求时,所有asp.net worker-process´线程都将使用相同的HMACSHA1实例。
由所有ComputeHash()使用/修改的(HMACSHA1)instance-和ComputeHash()方法变量是否将由所有线程共享(=可以修改)?这个假设正确吗?
结果,不能保证ComputeHash的返回值是正确的?!?!
因此,不允许我在所有asp.net线程上使用静态/共享的HMACSHA1-instance。

我只是想知道您如何看待这个问题。

唯一的解决方案是像ComputeHash()方法中的关键路径等。但这是“我们无法达到的”。

问候,
克里斯

最佳答案

哈希算法是确定性的,它们必须每次都为给定的输入返回相同的哈希。

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

使用静态实例绝对危险。如果Thread1设置要计算的值,然后Thread2在Thread1调用ComputerHash()之前设置值,则Thread1将获取Thread2的值的哈希值。如果任何一个线程都在设置 key ,也会发生同样的情况。

关于asp.net - HMACSHA1.ComputeHash()线程安全性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/569683/

10-12 13:11