RSA解密的时候显示"不正确的数据"是什么原因

RSA解密的时候显示"不正确的数据"是什么原因,第1张

加密算法对加密的原文是有长度要求的 长度必须是某个数字的整倍数 不够的要补数据。 加密之后的密文就丢失了原文的长度 解密之后会得到补充数据的内容,就是前面的那些了。 你传个原文长度试试

/// <summary>

/// DES数据加密

/// </summary>

/// <param name="targetValue">目标值</param>

/// <param name="key">密钥</param>

/// <returns>加密值</returns>

public static string Encrypt(string targetValue, string key)

{

if (string.IsNullOrEmpty(targetValue))

{

return string.Empty

}

var returnValue = new StringBuilder()

var des = new DESCryptoServiceProvider()

byte[] inputByteArray = Encoding.Default.GetBytes(targetValue)

// 通过两次哈希密码设置对称算法的初始化向量

des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile

(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").

Substring(0, 8), "sha1").Substring(0, 8))

// 通过两次哈希密码设置算法的机密密钥

des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile

(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")

.Substring(0, 8), "md5").Substring(0, 8))

var ms = new MemoryStream()

var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)

cs.Write(inputByteArray, 0, inputByteArray.Length)

cs.FlushFinalBlock()

foreach (byte b in ms.ToArray())

{

returnValue.AppendFormat("{0:X2}", b)

}

return returnValue.ToString()

}

/// <summary>

/// DES数据解密

/// </summary>

/// <param name="targetValue"></param>

/// <param name="key"></param>

/// <returns></returns>

public static string Decrypt(string targetValue, string key)

{

if (string.IsNullOrEmpty(targetValue))

{

return string.Empty

}

// 定义DES加密对象

var des = new DESCryptoServiceProvider()

int len = targetValue.Length / 2

var inputByteArray = new byte[len]

int x, i

for (x = 0x <lenx++)

{

i = Convert.ToInt32(targetValue.Substring(x * 2, 2), 16)

inputByteArray[x] = (byte)i

}

// 通过两次哈希密码设置对称算法的初始化向量

des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile

(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").

Substring(0, 8), "sha1").Substring(0, 8))

// 通过两次哈希密码设置算法的机密密钥

des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile

(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")

.Substring(0, 8), "md5").Substring(0, 8))

// 定义内存流

var ms = new MemoryStream()

// 定义加密流

var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)

cs.Write(inputByteArray, 0, inputByteArray.Length)

cs.FlushFinalBlock()

return Encoding.Default.GetString(ms.ToArray())

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6803030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存