decryptKey = decryptKey.Substring(2, 4) + decryptKey.Substring(4, 4);
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = publicKeys;
byte[] decryptBytes = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desProvider.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cs.Write(decryptBytes, 0, decryptBytes.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray(), 0, ms.ToArray().Length);
上面是源代码,比如输入“3432432”,加密结果为“73498hfidsui+984^#”,再对这个加密后的字符串解密,出来结果是“3”,后面的都丢失了。
为什么呢????????这个是网上比较标准的DES解密的写法了,为什么会不对呢?解密c#DES
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = publicKeys;
byte[] decryptBytes = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desProvider.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cs.Write(decryptBytes, 0, decryptBytes.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray(), 0, ms.ToArray().Length);
上面是源代码,比如输入“3432432”,加密结果为“73498hfidsui+984^#”,再对这个加密后的字符串解密,出来结果是“3”,后面的都丢失了。
为什么呢????????这个是网上比较标准的DES解密的写法了,为什么会不对呢?解密c#DES
解决方案 »
- 如何从jpeg图像读取质量因数?
- DevExpress控件库中的ComboBoxEdit控件属性
- C#中的一些常量....
- [求助]如何访问局域网内其他电脑上的文件
- FtpWebRequest 非root用户 DownLoad文件
- c# picturebox显示大图片问题
- 多线程进行传输文件
- C#ArryList()在两个类中怎么调用
- 请问到底如何才能解决数据库连接上Unspecified error的错误?
- webKitBrowser1.Navigate("www.taobao.com")不能跳转到淘宝界面
- 【C#疑问】给多个窗体添加了图标之后
- datagridview 点击列标题排序后,自定义列数据清空的问题
{
/// <summary>
/// DES 加密
/// </summary>
/// <param name="strValue"></param>
/// <param name="strKey"></param>
/// <returns></returns>
public static string Encryp(string strValue, string strKey)
{
string EncrypString;
byte[] key = ASCIIEncoding.ASCII.GetBytes(strKey.Substring(0, 8));
byte[] iv = ASCIIEncoding.ASCII.GetBytes(strKey.Insert(0, "w").Substring(0, 8));
if (strValue != "")
{
try
{
DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
MemoryStream memStream = new MemoryStream();
using (memStream)
{
CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);
StreamWriter sWriter = new StreamWriter(crypStream);
sWriter.Write(strValue);
sWriter.Flush();
crypStream.FlushFinalBlock();
memStream.Flush();
EncrypString = Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length);
}
}
catch (ArgumentException)
{
EncrypString = null;
}
catch (CryptographicException)
{
EncrypString = null;
}
}
else
{
EncrypString = "";
}
return EncrypString;
} /// <summary>
/// DES解密
/// </summary>
/// <param name="EncValue"></param>
/// <param name="strKey"></param>
/// <returns></returns>
public static string Decryp(string EncValue, string strKey)
{
string strValue;
byte[] key = ASCIIEncoding.ASCII.GetBytes(strKey.Substring(0, 8));
byte[] iv = ASCIIEncoding.ASCII.GetBytes(strKey.Insert(0, "w").Substring(0, 8));
if (EncValue != "")
{
try
{
DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
byte[] buffer = Convert.FromBase64String(EncValue);
MemoryStream memStream = new MemoryStream();
using (memStream)
{
CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(key, iv), CryptoStreamMode.Write);
crypStream.Write(buffer, 0, buffer.Length);
crypStream.FlushFinalBlock();
strValue = ASCIIEncoding.UTF8.GetString(memStream.ToArray());
}
}
catch (ArgumentException)
{
strValue = null;
}
catch (CryptographicException)
{
strValue = null;
}
}
else
{
strValue = "";
}
return strValue;
}
}
我看网上还说这公钥私钥是一对的,好像还要特定生成不怎么的,实在不是很明白,求教一下~
用你的倒是没有问题了,可是我的问题在哪呢?P.S : 我想问一个非常小白的问题,这个byte[] key就是我们说的私钥吧,这个是可以随意定的吗?byte[] iv我自己用的是公钥,这个也是可以随便定的吗?
我看网上还说这公钥私钥是一对的,好像还要特定生成不怎么的,实在不是很明白,求教一下~
用你的倒是没有问题了,可是我的问题在哪呢?P.S : 我想问一个非常小白的问题,这个byte[] key就是我们说的私钥吧,这个是可以随意定的吗?byte[] iv我自己用的是公钥,这个也是可以随便定的吗?
我看网上还说这公钥私钥是一对的,好像还要特定生成不怎么的,实在不是很明白,求教一下~我也是用到这个在网上找的,不过这个钥匙好像可以自己定义,你试一下就好了啊。自己定义一个写进去再用你定时的取出来。我用的时候是自己定义的。
用你的倒是没有问题了,可是我的问题在哪呢?P.S : 我想问一个非常小白的问题,这个byte[] key就是我们说的私钥吧,这个是可以随意定的吗?byte[] iv我自己用的是公钥,这个也是可以随便定的吗?
我看网上还说这公钥私钥是一对的,好像还要特定生成不怎么的,实在不是很明白,求教一下~
DES没有公钥私钥,只有密钥和初始化向量。
key是密钥,可以看作是密码,IV是初始化向量,用于影响加密过程中的s-box,两个是独立的,不存在配对的关系,可以随意定义。
唯一需要注意的就是在DES中这两个参数为长度为8的字节数组,如果长度不正确会导致调用时出现异常,这里一定要进行检测(对输入进行补全或舍弃)
另外要注意的就是字符串->字节数组转换过程中的编码,建议统一设置为UTF8以保证兼容