Я - новичок шифрования, пытающийся передать некоторые значения назад и вперед между системами. Я могу зашифровать значение, но, может казаться, не выясняю, как дешифровать на другом конце. Я создал простое приложение 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.) Вы также можете посмотреть его доклад DDD по этой теме.
Просто чтобы расширить ответ Джона, потому что вам, вероятно, интересно, какой смысл шифровать что-то, что вы не можете расшифровать - HMAC-SHA1, как сказал Джон, является хэшем. Полученная строка не содержит исходной информации, даже в зашифрованном виде... Это просто последовательность байтов".
Однако прелесть хэша в том, что любое изменение, которое вы можете внести в строку, почти наверняка приведет к изменению результата хэширования, а результат хэширования, как правило, довольно мал. По этой причине хэши часто используются для проверки того, что часть информации не была подделана.
Например,
я хочу послать Джону сообщение - и я хочу, чтобы он был уверен, что один из его товарищей не изменил сообщение до того, как он его прочитает. Я не могу просто взять хэш моего сообщения и отправить его, потому что все, что нужно сделать виновнику проблем, это заменить сообщение своим собственным и предоставить соответствующий хэш...
Однако, если я снабжу свое сообщение хэшем не самого сообщения, а скорее сообщения с несколькими определенными дополнительными байтами, о которых мы с Джоном договорились заранее, виновник неприятностей будет побежден. Джон знает, что нужно добавить дополнительные байты (обычно это называется солерованием хэша) перед хэшированием моего сообщения, а виновник неприятностей не знает - поэтому, если он изменит сообщение, даже если он разработает свой собственный хэш, Джон сможет понять, что что-то не так...
Шифрование / хэширование - дело непростое, и я сам едва коснулся поверхности - но я подумал, что это может дать вам простой пример того, для чего используются хэши...
Еще одно очень распространенное применение - хранение информации о членстве на сайте: люди хранят не пароль, а хэш пароля. Это означает, что даже если кому-то удастся узнать данные пользователя, он не сможет использовать их для входа в вашу систему.
Martin