求助,用vb.net做aes加密器的问题

bz0615 2013-08-27 07:29:56
我在做文本加解密功能,加密还好,几句话就完事了,可是解密时输入文本我不会转换成byte()。所以现在程序阶段处于只能加密不能解密。。放上网上的源码(自己无关紧要的改了几句),我希望可以对string进行解密
    Private Function Encrypt(ByVal plainText As String, ByVal key As String) As String

Dim AES As New RijndaelManaged()

Dim MD5 As New MD5CryptoServiceProvider()

Dim plainTextData As Byte() = Encoding.Unicode.GetBytes(plainText)

Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))

Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee"))

AES.Key = keyData
AES.Mode = CipherMode.CFB
AES.Padding = PaddingMode.Zeros
Dim transform As ICryptoTransform = AES.CreateEncryptor()

Dim outputData As Byte() = transform.TransformFinalBlock(plainTextData, 0, plainTextData.Length)
Encrypt = Convert.ToBase64String(outputData)

End Function

'解密
Private Function Decrypt(ByVal cipherTextData As Byte(), ByVal key As String) As String

Dim AES As New RijndaelManaged()

Dim MD5 As New MD5CryptoServiceProvider()

Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))

Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee"))

AES.Key = keyData
AES.Mode = CipherMode.CFB

AES.Padding = PaddingMode.Zeros

Dim transform As ICryptoTransform = AES.CreateDecryptor()

Dim outputData As Byte() = transform.TransformFinalBlock(cipherTextData, 0, cipherTextData.Length)

Decrypt = Encoding.UTF8.GetString(outputData)

End Function

...全文
354 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2013-09-02
  • 打赏
  • 举报
回复
Private Function Encrypt(ByVal plainText As String, ByVal key As String) As String

Dim AES As New RijndaelManaged()

Dim MD5 As New MD5CryptoServiceProvider()

Dim plainTextData As Byte() = Encoding.Unicode.GetBytes(plainText)

Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))

Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee"))

AES.Key = keyData
AES.IV = IVData '加密/解密都没有设置初始化向量'
AES.Mode = CipherMode.CFB
AES.Padding = PaddingMode.Zeros
Dim transform As ICryptoTransform = AES.CreateEncryptor()

Dim outputData As Byte() = transform.TransformFinalBlock(plainTextData, 0, plainTextData.Length)
Encrypt = Convert.ToBase64String(outputData)'Base-64 可以正常工作,你的问题不在这里'
End Function
Private Function Decrypt(ByVal ciphertext As String, ByVal key As String) As String
Dim ciphertextdata As Byte() = Convert.FromBase64String(ciphertext)

Dim AES As New RijndaelManaged()

Dim MD5 As New MD5CryptoServiceProvider()

Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))
Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee"))

AES.Key = keyData
AES.IV = IVData '加密/解密都没有设置初始化向量'
AES.Mode = CipherMode.CFB
AES.Padding = PaddingMode.Zeros
Dim transform As ICryptoTransform = AES.CreateDecryptor()

Dim outputData As Byte() = transform.TransformFinalBlock(ciphertextdata, 0, ciphertextdata.Length)

Decrypt = Encoding.Unicode.GetString(outputData)
End Function
Tiger_Zhao 2013-08-30
  • 打赏
  • 举报
回复
那么你借鉴后的解密方法怎么的?
从你的代码看就只剩下 Base-64 编码的密文没有解码了。
bz0615 2013-08-30
  • 打赏
  • 举报
回复
Private Function Encrypt(ByVal plainText As String, ByVal key As String) As String Dim AES As New RijndaelManaged() Dim MD5 As New MD5CryptoServiceProvider() Dim plainTextData As Byte() = Encoding.Unicode.GetBytes(plainText) Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key)) Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee")) AES.Key = keyData AES.Mode = CipherMode.CFB AES.Padding = PaddingMode.Zeros Dim transform As ICryptoTransform = AES.CreateEncryptor() Dim outputData As Byte() = transform.TransformFinalBlock(plainTextData, 0, plainTextData.Length) Encrypt = Replace(BitConverter.ToString(outputData),"-","") End Function Function getbytex(ByVal sourcestr As String) As Byte() Dim len As Integer = sourcestr.Length / 2 - 1 Dim inputByteArray(len) As Byte Dim x, i As Integer For x = 0 To len i = Convert.ToInt32(sourcestr.Substring(x * 2, 2), 16) inputByteArray(x) = CType(i, Byte) Next '解密 getbytex = inputByteArray End Function Private Function Decrypt(ByVal ciphertext As String, ByVal key As String) As String Dim ciphertextdata As Byte() ciphertextdata = getbytex(ciphertext) Dim AES As New RijndaelManaged() Dim MD5 As New MD5CryptoServiceProvider() Dim keyData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes(key)) Dim IVData As Byte() = MD5.ComputeHash(Encoding.UTF8.GetBytes("Alex Lee")) AES.Key = keyData AES.Mode = CipherMode.CFB AES.Padding = PaddingMode.Zeros Dim transform As ICryptoTransform = AES.CreateDecryptor() Dim outputData As Byte() = transform.TransformFinalBlock(ciphertextdata, 0, ciphertextdata.Length) Decrypt = Encoding.Unicode.GetString(outputData) End Function 这样,编码解码挺一致的啊,就是原文和密文解密结果byte连长度都完全不一样,密钥也一致,不知道为啥了 另外咋回复啊
Tiger_Zhao 2013-08-29
  • 打赏
  • 举报
回复
加密/解密要配对。
bz0615 你的密文是 Base-64 格式,就要用 Convert.FromBase64String() 方法转换。
看 allanli 的解密方式,密文是明显16进制字符串,和你的加密方式根本不配对。
hurtsobad 2013-08-29
  • 打赏
  • 举报
回复
学习学习,顶一下
bz0615 2013-08-29
  • 打赏
  • 举报
回复
楼上的,这个我知道,我的意思是我认为问题出在加解密,因为明文和密文解密结果byte都不一样,一定不是因为编码问题alianli的方式我只借鉴了一小部分,不包括输出
allanli 2013-08-28
  • 打赏
  • 举报
回复
贴一个我的解密方法

    Public Shared Function DESDecrypt(ByVal strSource As String, Optional ByVal strPassWordKey As String = Nothing) As String

        '解密字符串

        Try
            Dim des As New DESCryptoServiceProvider
            '把字符串放入byte数组  
            Dim len As Integer = strSource.Length / 2 - 1
            Dim inputByteArray(len) As Byte
            Dim x, i As Integer

            If strPassWordKey = Nothing Then
                strPassWordKey = LoginPassWordKey.Substring(0, 8)
            ElseIf strPassWordKey.Length <> 8 Then
                strPassWordKey = (strPassWordKey & LoginPassWordKey).Substring(0, 8)
            End If
            For x = 0 To len
                i = Convert.ToInt32(strSource.Substring(x * 2, 2), 16)
                inputByteArray(x) = CType(i, Byte)
            Next
            '建立加密对象的密钥和偏移量,此值重要,不能修改
            des.Key = ASCIIEncoding.ASCII.GetBytes(strPassWordKey)
            des.IV = ASCIIEncoding.ASCII.GetBytes(strPassWordKey)
            Dim ms As New System.IO.MemoryStream
            Dim cs As New CryptoStream(ms, des.CreateDecryptor, CryptoStreamMode.Write)
            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()

            Return Encoding.Default.GetString(ms.ToArray)

        Catch ex As Exception
            Return strSource
        End Try
    End Function
Tiger_Zhao 2013-08-28
  • 打赏
  • 举报
回复
用 Convert.FromBase64String() 方法
bz0615 2013-08-28
  • 打赏
  • 举报
回复
2楼大神,string转byte正确工作了,可是还是不能解密出正确结果,这是为什么呢?
jack81329 2013-08-28
  • 打赏
  • 举报
回复
学习来的

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧