vb.net AES CBC加密模式问题
我在vb.net中使用AES的CBC模式加密文本,如256位加密AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA得到
F4EF70150E5C5E23EE2D4D88B57EE14CF004464973EB9A15B8E0A260A469A2040E0281344599B9F9C4D0210ECB1ABA13C701F3F527FF052119113E49D97962C8AA52E48E9E556FC600A56A5E0D119295
修改其中一位比如这样
E4EF70150E5C5E23EE2D4D88B57EE14CF004464973EB9A15B8E0A260A469A2040E0281344599B9F9C4D0210ECB1ABA13C701F3F527FF052119113E49D97962C8AA52E48E9E556FC600A56A5E0D119295
以原密码解密
得到
抝ى寽ꄮ൛ͣ䧲姓QAAAAAAAAAAAAAAAAAAAAAAAA(希望论坛认得乱码)
但是CBC模式不应该是一位出错会导致全部出错的吗
这是我的代码(对密码混乱的处理方式就不要看了。。)
Private Sub cmdEntext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEntext.Click
If txtpassword.Text = txtconfirm.Text Then
txtd.Text = Encrypttext(txts.Text, txtconfirm.Text, Val(Microsoft.VisualBasic.Left(howmanybits.Text, 3)))
Else
MsgBox("两次密码不一致!", MsgBoxStyle.Critical, "提示")
End If
End Sub
Public Function Encrypttext(ByVal plaintext As String, ByVal sKey As String, ByVal keysize As Integer) As String
On Error Resume Next
Dim AES As New RijndaelManaged()
Dim sha384 As New SHA384CryptoServiceProvider
Dim sha256 As New SHA256CryptoServiceProvider
Dim sha512 As New SHA512CryptoServiceProvider
Dim MD5 As New MD5CryptoServiceProvider
If keysize = 128 Then AES.KeySize = 128 : AES.Key = gethalf(sha256.ComputeHash(Encoding.Unicode.GetBytes(sKey)))
If keysize = 192 Then AES.KeySize = 192 : AES.Key = gethalf(sha384.ComputeHash(Encoding.Unicode.GetBytes(sKey)))
If keysize = 256 Then AES.KeySize = 256 : AES.Key = gethalf(sha512.ComputeHash(Encoding.Unicode.GetBytes(sKey)))
AES.Padding = PaddingMode.PKCS7
AES.IV = MD5.ComputeHash(Encoding.Unicode.GetBytes("By Bz"))
AES.Mode = CipherMode.CBC
Dim desencrypt As ICryptoTransform = AES.CreateEncryptor()
Dim ms As New MemoryStream
Dim cryptostream As New CryptoStream(ms, desencrypt, CryptoStreamMode.Write)
Dim plaintextdata As Byte() = Encoding.Unicode.GetBytes(plaintext)
cryptostream.Write(plaintextdata, 0, plaintextdata.Length)
cryptostream.FlushFinalBlock()
Return Replace(BitConverter.ToString(ms.ToArray()), "-", "")
cryptostream.Close()
ms.Close()
Form1.cmdEntext.Enabled = True
Form1.cmdDetext.Enabled = True
End Function