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
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
...全文
相关推荐
可用的C++编写的aes算法
可用的C++编写的aes算法, 可通过ndk直接编译为so库. 也可编译为dll给其它平台使用
为VB6项目集成AES加密:DLL方案实现与避坑指南
AES(高级加密标准)作为目前全球广泛采用的对称加密算法,通过分组加密和密钥扩展机制,为数据提供了高强度的机密性保护。其技术价值在于平衡了安全性与性能,成为保护敏感信息的行业标准。在实际工程中,AES常用于加密配置文件、网络传输数据及用户文件等场景。针对VB6这类遗留系统,原生加密能力薄弱,直接实现AES算法复杂且低效。通过将AES核心算法用C/C++封装成标准Windows DLL,再由VB6调用,成为一种务实可靠的升级路径。该方案能有效解决类似“java.security.invalidkeyexcep
VB.NET实现AES加密解密
VB.NET实现AES加密解密代码,可直接使用
VB.NET AES 加密
此為VB.NET 開發的AES加密 歡迎下載使用 也謝謝您將回饋的建議給我感恩~
vb.net AES加密解密模块 VS2010
vb.net AES加密解密模块 VS2010


