Вопрос

Я новичок в шифровании и пытаюсь передавать некоторые значения между системами.Я могу зашифровать значение, но не могу понять, как его расшифровать на другом конце.Я создал простое приложение 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
Это было полезно?

Решение

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

Другие советы

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

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

Например,

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

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

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

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

Мартин

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

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

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

например:хэш = myHash("john7@пароль")

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top