请看为什么这段dec解密程序有问题?
把加密后的字符串保存到数据库中,但是有的密码可以被正确解密,而有的密码则不能被正确解密。请问为什么?
/// <summary>
/// DEC 解密过程
/// </summary>
/// <param name="pToDecrypt">需要解密的字符串</param>
/// <param name="sKey">密钥</param>
/// <returns>解密后字符串</returns>
private string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
/// <summary>
/// DEC 加密过程
/// </summary>
/// <param name="pToEncrypt">需要加密的字符串</param>
/// <param name="sKey">密钥</param>
/// <returns>加密后字符串</returns>
private string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
MemoryStream ms = new MemoryStream(); //使得输入密码必须输入英文文本
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
...全文
相关推荐
md5_DEC加密解密工具软件
md5_DEC加密解密:小工具,方便开发软件,调试时使用; 很容易查看加密和解密的字符串; 注意:DEC的密钥需要大于等于8位;
3DEC加密解密c++封装(实现ECB和BCB模式)
这段时间搜了网上很多c/c++ 3des的加解密源代码,有些实现错误(其他语言lib不能相互加解密),有些实现封装得层次太低,感觉不好用。我在使用得比较多的开源程序d3des.c基础上封装了一个类,可以直接加密文件或者流数据,实现的加解密模式是ECB和BCB。资源中包含类的实现和vc的测试工程,这个类已经在windows,linux,vxworks下使用。
DEC加密解密算法速度还是挺快的,排序算法数据结构 最快的排序算法
DEC加密解密算法速度还是挺快的,排序算法数据结构 最快的排序算法
dec加密
DEC加密算法,可以直接拿来使用,也可以修改成c语言,其中主要是c中没有定义bool,需要自己定义
SEED-DEC2812函数说明
SEED-DEC2812函数说明 SEED-DEC2812函数说明


