Как описано в предыдущем ответе, симметричный алгоритм (где для шифрования и дешифрования используется один секретный ключ). Мне довелось использовать алгоритм DES. Эта подпрограмма шифрования возвращает выходные данные процесса шифрования (а дешифрование имеет в качестве входных данных) строку в кодировке base64, а не байтовый массив (который является «естественным» выводом классов шифрования инфраструктуры).
Private key() As Byte = {}
Private IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
Private Const EncryptionKey As String = "abcdefgh"
Public Function Decrypt(ByVal stringToDecrypt As String) As String
Try
Dim inputByteArray(stringToDecrypt.Length) As Byte
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
Public Function Encrypt(ByVal stringToEncrypt As String) As String
Try
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
Отредактировано, чтобы добавить:
Вот импорт, который я имею в этом модуле:
Imports System
Imports System.IO
Imports System.Xml
Imports System.Text
Imports System.Security.Cryptography
Длина ключа DES составляет 56 бит (всего 8 байтов или символов). На «большой картине» в наши дни это не считается очень безопасным (см. эту статью в Википедии о размерах ключей ), но, как вы описали «secure-ish», возможно, это нормально. Если вам нужно более безопасное шифрование, вам следует исследовать его с помощью одного из более безопасных алгоритмов.
Ключ шифрования в вышеприведенных подпрограммах находится в закрытой константе EncryptionKey. Измените это значение на желаемый ключ. Или вы можете реализовать собственное управление ключами (ввод из файла, запрос пользователя и т. Д.).
Не уверен, почему Left и Convert были бы сломаны. Слева - член Microsoft.VisualBasic.Strings, а Convert - член системы.
Я настоятельно рекомендую вам прочитать статьи, на которые ссылается Ремус Русану, а также другие статьи, связанные с ними. Они предоставят вам большой опыт по шифрованию в базовых классах.