Как расшифровать строку, зашифрованную с помощью HMACSHA1?

Я новичок в шифровании, пытающийся передать некоторые значения между системами. Я могу зашифровать значение, но не могу понять, как расшифровать на другом конце. Я создал простое приложение Windows Forms, используя VB.NET - ... Попытка ввести значение и ключ, зашифровать, а затем расшифровать, чтобы получить исходное значение. Вот мой код. Любая помощь очень ценится. Спасибо.

Imports System
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text

Public Class Form1

    Private Sub btnEncode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncode.Click
        Dim hmacsha1 As New HMACSHA1(Encoding.ASCII.GetBytes(txtKey.Text))
        Dim hashValue As Byte() = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(txtValue.Text))
        txtResult.Text = BytesToHexString(hashValue)
        hmacsha1.Clear()
    End Sub

    Private Sub btnDecode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecode.Click
        '???
    End Sub

    Private Function BytesToHexString(ByVal bytes As Byte()) As String
        Dim output As String = String.Empty
        Dim i As Integer = 0
        Do While i < bytes.Length
            output += bytes(i).ToString("X2")
            i += 1
        Loop
        Return output
    End Function
End Class

3 ответов


HMAC-SHA1 является односторонним хэш, а не двунаправленный безопасность. Вы не можете расшифровать его. У меня нет времени, чтобы предоставить полный код шифрования здесь - это сложная тема, но Барри Дорранс "начало ASP.NET безопасность" даст вам хорошую отправную точку. (Только некоторые из них-ASP.Специфичный для сети.) Вы также можете посмотреть его DDD talk по теме.


просто чтобы расширить ответ Джона, потому что вам, вероятно, интересно, в чем смысл шифрования чего - то, что вы не можете расшифровать-HMAC-SHA1, как сказал Джон, хэш. Полученная строка не содержит исходной информации, даже в зашифрованном виде... Это просто последовательность байтов.

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

например,

однако, если я поставляю свое сообщение с хэшем не самого сообщения, а скорее сообщения с несколькими конкретными дополнительными байтами, о которых мы с Джоном договорились заранее, создатель проблем побежден. Джон знает, что нужно добавить дополнительные байты (обычно известные как соление хэша), прежде чем он хэширует мое сообщение, но причинитель проблем не делает этого, поэтому, если он изменит сообщение, даже если он разработает свой собственный хэш, Джон может видеть, что что - то не так...

Encyryption / Хэши это очень сложный бизнес, и я сам едва поцарапал поверхность, но я подумал, что это может дать вам простой пример того, для чего используются хэши...

другое очень распространенное использование для поддержания информации о членстве на сайте-люди не хранят пароль, а скорее хэш пароля. Это означает, что даже если кому-то удастся взломать ваши пользовательские данные, они не смогут использовать их для входа в систему.

Мартин


простое одностороннее объяснение хэша о том, почему люди хотели бы это сделать.

допустим, у вас есть учетная запись Пользователя с именем пользователя и паролем Джон Доу. Вы храните хэш следующей строки.

имя, Ваш любимый номер и выбранный ими пароль

например: hash= myHash ("john7@password")

             now hash = "qk239qa*@$)(*84509053903" or whatever

теперь, когда хэш защищен и не может быть отменен, чтобы выяснить, какое ваше любимое число в большинстве случаи. Чтобы проверить, если хэш является правильным для входа в систему, вы бы повторно хэш поставляемого ввода (имя,фамилию, номер или ж/д, пароль), и если вы получите точно такой же хэш, его действительную сделку. wo0t не совсем простой!

--должен ли я использовать тот же ключ для повторной хэш мои данные?