2012-03-25 2 views
0

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

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 
+0

Эти функции выглядят правильно. Как вы их называете? –

ответ

0

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

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 

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

+0

Мысль об этом, но не кажется вероятным, поскольку плакат сказал, что зашифрованный текст был различным каждый раз. – dtech

+0

Моя ошибка, ошибка была в другом месте, но ее не растратила помощь от вас, ребята, поскольку это поможет другим людям в будущем. Спасибо за ваше время и усилия. – MiscellaneousUser

+0

Рад помочь, но вы должны прочитать [FAQ] (http://stackoverflow.com/faq#howtoask) – Steve

Смежные вопросы