Итеративный / Добавочный MD5 - PullRequest
2 голосов
/ 29 апреля 2010

Мне нужно создать контрольную сумму по словарю. Ключи и Значения.

Есть ли простой способ сделать это итеративным способом.

foreach (var item в dic.Kys) контрольная сумма + = контрольная сумма (dic [item]) + контрольная сумма (item);

В этом случае ключи и значения можно преобразовать в строки, объединить, а затем применить к ним одну контрольную сумму, но есть ли лучший способ?

В идеале MD5, но могут работать и другие варианты. Использование этого для проверки данных, которые передаются через несколько методов хранения. Затем контрольная сумма зашифровывается вместе с некоторой другой информацией (с использованием AES), поэтому меня не беспокоит идеальная неразрушимая контрольная сумма.

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

Генерация подписи во многом одинакова: создайте хеш-объект MD5, затем вы перевариваете все интересующие вас байты и извлекаете хеш-значение. Важно, чтобы вы и верификатор согласовали байты для хеширования и порядок их хеширования.

В C # вы можете добиться этого, повторно вызывая HashAlgorithm.TransformBlock , а затем, наконец, вызывая HashAlgorithm.TransformFinalBlock . Это автоматизируется с помощью CryptoStream с HashTransform ( MD5 реализует ICryptoTransform), а затем просто записывает ваш словарь в криптопоток.

В дополнение к сведению, бесчисленные протоколы и криптографические схемы, которые переваривают хеш и шифруют его, были унижены в дикой природе. Я бы предложил пойти по проторенному пути и использовать общепринятые отраслевые стандарты ::

  • Использовать HMAC, см. HMACMD5
  • Используйте подпись RSA (т. Е. Шифрование с помощью личного ключа хэша MD5) и избавьте себя от всех проблем, связанных с предоставлением ключей и обменом секретами, см. RSACryptoServiceProvider.SignHash
0 голосов
/ 29 апреля 2010

Вы не должны писать новый код, основанный на MD5. Это устарело, и по некоторым очень веским причинам. Вам следует взглянуть на SHA-256 или, по крайней мере, на SHA-1, вместо

И тебе следует принять совет Ремуса. Криптография + хэши = цифровые подписи. Возьмите что-нибудь с полки (только не XML-Security, пожалуйста!), Изучите это, используйте это и зайдите в другие интересные части вашего проекта.

0 голосов
/ 29 апреля 2010

Ответил на свой вопрос, я думаю ....

GetHashCode () для каждого элемента. Добавьте их в непроверенную среду {}. Слишком просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...