Простая функция для шифрования и дешифрования скрипта - PullRequest
0 голосов
/ 26 марта 2012

У меня есть две функции, которые должны шифровать и дешифровать строку, но функция шифрования каждый раз возвращает одну и ту же зашифрованную строку для одного и того же текста. Что я сделал не так?

Public Shared Function Encrypt(ByVal strText As String, ByVal strKey As String) As String
    Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
    Try
        Dim bykey() As Byte = System.Text.Encoding.UTF8.GetBytes(Left(strKey, 8))
        Dim InputByteArray() As Byte = System.Text.Encoding.UTF8.GetBytes(strText)
        Dim des As New DESCryptoServiceProvider
        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, des.CreateEncryptor(bykey, IV), CryptoStreamMode.Write)
        cs.Write(InputByteArray, 0, InputByteArray.Length)
        cs.FlushFinalBlock()
        Return Convert.ToBase64String(ms.ToArray())
    Catch ex As Exception
        Return ex.Message
    Finally
    End Try
End Function

Public Shared Function Decrypt(ByVal strText As String, ByVal strKey As String) As String
    Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
    Dim inputByteArray(strText.Length) As Byte
    Try
        Dim byKey() As Byte = System.Text.Encoding.UTF8.GetBytes(Left(strKey, 8))
        Dim des As New DESCryptoServiceProvider
        inputByteArray = Convert.FromBase64String(strText)
        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey, 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
        Return ex.Message
    End Try
End Function

1 Ответ

0 голосов
/ 26 марта 2012

Возможно, для расшифровки необходимо прочитать зашифрованные данные, а не перезаписать их.

Public Shared Function Decrypt(ByVal strText As String, ByVal strKey As String) As String 
    Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF} 
    Dim inputByteArray(strText.Length) As Byte 
    string result
    Try 
        Dim byKey() As Byte = System.Text.Encoding.UTF8.GetBytes(Left(strKey, 8)) 
        Using des As New DESCryptoServiceProvider 
            inputByteArray = Convert.FromBase64String(strText) 
            Using ms As New IO.MemoryStream(inputByteArray)
               Using cs As New CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Read) 
                   Using srDecrypt As = New StreamReader(cs)
                       result = srDecrypt.ReadToEnd()
                   End Using
               End Using
            End Using
        End Using
        Return result
    Catch ex As Exception 
        Return ex.Message 
    End Try 
End Function 

Редактировать: Теперь это работает.Добавлено использование в одноразовые классы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...