Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET-要解密的数据长度无效_Vb.net_Encryption - Fatal编程技术网

VB.NET-要解密的数据长度无效

VB.NET-要解密的数据长度无效,vb.net,encryption,Vb.net,Encryption,我想做一个关于加密和解密的练习。我已经有以下工作代码需要加密(我知道ECB不好,我保证在现实生活中不会使用它): 现在我试图解密这个函数的输出。我尝试使用相同的代码,只是将加密行替换为: Me.txtPwd.Text = Convert.ToBase64String(des.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length)) 但它不起作用,因为我收到错误“要解密的数据长度无效”。我已经尝试了很多解决堆栈溢出的方法,但是没有一

我想做一个关于加密和解密的练习。我已经有以下工作代码需要加密(我知道ECB不好,我保证在现实生活中不会使用它):

现在我试图解密这个函数的输出。我尝试使用相同的代码,只是将加密行替换为:

Me.txtPwd.Text = Convert.ToBase64String(des.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length))

但它不起作用,因为我收到错误“要解密的数据长度无效”。我已经尝试了很多解决堆栈溢出的方法,但是没有一个有效。有人能帮我解决这个问题吗?提前谢谢

您试图解密的内容与实际加密的内容不完全相同:

在加密中,使用
convert.ToBase64String

您需要将txtPwd字段中的字符串转换回原始加密的结果字节数组。请参阅匹配的
Convert.FromBase64String
方法

如果将原始加密行拆分,您可能可以更好地查看我的意思:

dim encBytes = des.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length)
Me.txtPwd.Text = Convert.ToBase64String(encBytes)

通过这种方式,您可以看到实际的加密结果,并验证您传入的内容是否相同。

您没有对转换进行足够的反转。现在在
txtPwd
中的是base-64字符串,而不是使用ASCII编码转换的普通字符串。相反,解密过程中产生的字节应该被解释为ASCII字符

所以你想要的是:

buff = Convert.FromBase64String(Me.txtPwd.Text)

Me.txtPwd.Text = ASCIIEncoding.ASCII.GetString(des.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length))
buff = Convert.FromBase64String(Me.txtPwd.Text)

Me.txtPwd.Text = ASCIIEncoding.ASCII.GetString(des.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length))