中文加密无法解密成中文
以下是本人写的一个加密解密类,用这个类生成实例后可以对数字、英文加密解密,但中文加密后不能还原,不知为什么?另外加密用的“密钥”和“密值”有什么要求?也就是KEY和IV有什么要求?
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Public Class 加密解密
Private 密钥 As String
Private 密值 As String
Public WriteOnly Property set密钥()
Set(ByVal Value)
密钥 = Value
End Set
End Property
Public WriteOnly Property set密值()
Set(ByVal Value)
密值 = Value
End Set
End Property
Public Sub 加密(ByVal 加密文件 As String, ByVal 加密后文件 As String)
Try
Dim myDESProvider As DESCryptoServiceProvider = New DESCryptoServiceProvider
myDESProvider.Key = System.Text.UTF8Encoding.UTF8.GetBytes(密钥)
myDESProvider.IV = System.Text.UTF8Encoding.UTF8.GetBytes(密值)
Dim myICryptoTransform As ICryptoTransform = _
myDESProvider.CreateEncryptor(myDESProvider.Key, myDESProvider.IV)
Dim ProcessFileStream As FileStream = New _
FileStream(加密文件, FileMode.Open, FileAccess.Read)
Dim resultFileStream As FileStream = New _
FileStream(加密后文件, FileMode.Open, FileAccess.Write)
Dim myCryptoStream As CryptoStream = New _
CryptoStream(resultFileStream, myICryptoTransform, CryptoStreamMode.Write)
Dim bytearrayinput(ProcessFileStream.Length - 1) As Byte
ProcessFileStream.Read(bytearrayinput, 0, bytearrayinput.Length)
myCryptoStream.Write(bytearrayinput, 0, bytearrayinput.Length)
myCryptoStream.Close()
ProcessFileStream.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Public Function 解密(ByVal 解密文件 As String) As String
Try
Dim myDESProvider As DESCryptoServiceProvider = New DESCryptoServiceProvider
myDESProvider.Key = System.Text.UTF8Encoding.UTF8.GetBytes(密钥)
myDESProvider.IV = System.Text.UTF8Encoding.UTF8.GetBytes(密值)
Dim DecryptedFile As FileStream = New FileStream(解密文件, FileMode.Open, FileAccess.Read)
Dim myICryptoTransform As ICryptoTransform = myDESProvider.CreateDecryptor(myDESProvider.Key, myDESProvider.IV)
Dim myCryptoStream As CryptoStream = New CryptoStream(DecryptedFile, myICryptoTransform, CryptoStreamMode.Read)
Dim myDecStreamReader As New StreamReader(myCryptoStream)
解密 = myDecStreamReader.ReadToEnd
myCryptoStream.Close()
myDecStreamReader.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Function
End Class