Как дешифровать строку, зашифрованную с 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
9
задан Scott Arciszewski 28 May 2019 в 21:04
поделиться

2 ответа

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

18
ответ дан 4 December 2019 в 06:16
поделиться

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

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

Например,

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

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

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

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

Martin

21
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: