Я спрашиваю себя, было бы опасно использовать код страницы asp.net, чтобы использовать статическую (общую) переменную, которая содержит экземпляр HMACSHA1. проблема в том, что один и тот же экземпляр HMACSHA1 будет использоваться всеми потоками рабочего процесса asp.net при обработке нескольких одновременных запросов на одной и той же странице asp.net. все (HMACSHA1) экземпляры и ComputeHash() - переменные метода, которые используются/изменены ComputeHash(), будут разделены (= могут быть изменены) всеми потоками ?! это предположение верно? В результате возвращаемое значение ComputeHash не будет гарантировано правильным?!?! , таким образом, мне не разрешено использовать статический/Shared HMACSHA1-экземпляр поверх всех asp.net-потоков.HMACSHA1.ComputeHash() вопрос о безопасности нитей
Мне просто интересно, что вы думаете об этой проблеме.
Единственное решение для этого было бы как критический путь и т. Д. В методе ComputeHash(). но это «вне нашей досягаемости» ..
С уважением, Kris
Хеширование алгоритмов действительно должно быть детерминированным .. но проблема в многопоточности :) Как это понимать: «..не нужно сделать их статическими»? Ключ остается тем же самым все время и будет периодически (ежемесячно) изменен. Я создаю экземпляр следующим образом: HMAC hmac = HMAC.Create ("HMACSHA1"); – 2009-02-20 14:42:27
Причина, по которой я делал бы статическую переменную HMAC статикой в классе asp.net-codebehind, - это производительность .. но в противном случае ComputeHash() должен иметь почти около 100% своего контента между критическим разделом, чтобы гарантировать thread-safety .. – 2009-02-20 14:44:44
... моя идея удержать экземпляр hmac как статический была бы хороша для экономии памяти, возможно, но каждый запрос страницы займет больше времени, чем при нестатических hmac-экземплярах из-за механизма блокировки. – 2009-02-20 14:47:09