Я новичок в шифровании, пытаюсь передавать некоторые значения между системами. Я могу зашифровать значение, но не могу понять, как расшифровать на другом конце. Я создал простое приложение 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.NET.) Вы также можете посмотреть его Обсуждение DDD по теме.
Просто чтобы расширить ответ Джона, потому что вам, вероятно, интересно, в чем смысл шифрования того, что вы не можете расшифровать - HMAC-SHA1, как сказал Джон, является хешем. Полученная строка не содержит исходной информации даже в зашифрованном виде ... Это просто последовательность байтов.
Однако прелесть хеша в том, что любое изменение, которое вы можете внести в строку, почти наверняка приведет к изменению результата хеширования, а результат хеширования, как правило, будет довольно маленьким. По этой причине хеши часто используются, чтобы гарантировать, что часть информации не была изменена.
Например,
Я хочу отправить Джону сообщение - и я хочу, чтобы он был уверен, что один из его товарищей не изменил сообщение до того, как он его прочитал. Я не могу просто взять хэш своего сообщения и отправить его, потому что все, что должен был сделать виновник проблемы, - это заменить сообщение своим собственным и предоставить соответствующий хеш ...
Однако, если я добавляю в свое сообщение хэш не самого сообщения, а скорее сообщения с несколькими конкретными дополнительными байтами, о которых мы с Джоном заранее договорились, создатель проблем потерпит поражение. Джон знает, что нужно добавить дополнительные байты (обычно это называется «соление хэша»), прежде чем он хэширует мое сообщение, но источник проблем не делает этого - поэтому, если он изменяет сообщение, даже если он вырабатывает свой собственный хеш, Джон может видеть, что что-то неправильно ...
Шифрование / хэши - занятие утомительное, и я сам едва поцарапал поверхность, но подумал, что это может дать вам простой пример того, для чего используются хэши ...
Еще одно очень распространенное использование - сохранение информации о членстве на сайте - люди хранят не пароль, а хэш пароля. Это означает, что даже если кому-то удастся заблокировать ваши пользовательские данные, он не сможет использовать их для входа в вашу систему.
Мартин
Простое одностороннее хеш-объяснение того, почему люди захотят это сделать.
Допустим, у вас есть учетная запись пользователя с именем пользователя John и паролем Doe. Вы храните хеш следующей строки.
Имя, ваш любимый номер и выбранный пароль
Например: hash = myHash ("john7 @ password")
now hash = "qk239qa*@$)(*84509053903" or whatever
Теперь этот хеш безопасен и не может быть отменен, чтобы выяснить, какой ваш любимый номер в большинстве случаев. Чтобы проверить, подходит ли хеш для входа в систему, вы должны повторно хешировать предоставленный ввод (имя, ваш номер или ж / д, пароль), и если вы получите тот же точный хеш, это действительная сделка. Как бы то ни было, это совсем не просто!
- Могу ли я использовать тот же ключ для повторного хеширования моих данных?
Похожие вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.