那位高手做过C#加解密,我这加密没问题,解密总是返回空!
ECB DES解密
public static string DecryptDES(string encryptString, string encryptKey)
{
encryptString = encryptString.Replace(" ", "");
encryptKey = encryptKey.Replace(" ", "");
if ((encryptString.Length % 2) != 0)
encryptString += " ";
if ((encryptKey.Length % 2) != 0)
encryptKey += " ";
byte[] clearData = new byte[encryptString.Length / 2];
byte[] keys = new byte[encryptKey.Length / 2];
for (int i = 0; i < clearData.Length; i++)
{
clearData[i] = Convert.ToByte(encryptString.Substring(i * 2, 2), 16);
}
for (int i = 0; i < keys.Length; i++)
{
keys[i] = Convert.ToByte(encryptKey.Substring(i * 2, 2), 16);
}
try
{
DES desDecrypt = new DESCryptoServiceProvider();
desDecrypt.Mode = CipherMode.ECB;
desDecrypt.Key = keys;
ICryptoTransform transForm = desDecrypt.CreateDecryptor();
MemoryStream decryptedStreams = new MemoryStream();
CryptoStream cryptoStreams = new CryptoStream(decryptedStreams, transForm,CryptoStreamMode.Write);
cryptoStreams.Write(clearData,0,clearData.Length);
byte[] encryptedDatas = decryptedStreams.ToArray();
string returnStrs = "";
for (int i = 0; i < encryptedDatas.Length; i++)
{
returnStrs += encryptedDatas[i].ToString("X2");
}
return returnStrs;
}
catch (Exception e)
{
return e.Message;
}
}
调用解密函数string desjms = DecryptDES("0DA06156D09594C3", "3837363534333231");
应返回3132333435363738 为正确
ECB DES解密
public static string DecryptDES(string encryptString, string encryptKey)
{
encryptString = encryptString.Replace(" ", "");
encryptKey = encryptKey.Replace(" ", "");
if ((encryptString.Length % 2) != 0)
encryptString += " ";
if ((encryptKey.Length % 2) != 0)
encryptKey += " ";
byte[] clearData = new byte[encryptString.Length / 2];
byte[] keys = new byte[encryptKey.Length / 2];
for (int i = 0; i < clearData.Length; i++)
{
clearData[i] = Convert.ToByte(encryptString.Substring(i * 2, 2), 16);
}
for (int i = 0; i < keys.Length; i++)
{
keys[i] = Convert.ToByte(encryptKey.Substring(i * 2, 2), 16);
}
try
{
DES desDecrypt = new DESCryptoServiceProvider();
desDecrypt.Mode = CipherMode.ECB;
desDecrypt.Key = keys;
ICryptoTransform transForm = desDecrypt.CreateDecryptor();
MemoryStream decryptedStreams = new MemoryStream();
CryptoStream cryptoStreams = new CryptoStream(decryptedStreams, transForm,CryptoStreamMode.Write);
cryptoStreams.Write(clearData,0,clearData.Length);
byte[] encryptedDatas = decryptedStreams.ToArray();
string returnStrs = "";
for (int i = 0; i < encryptedDatas.Length; i++)
{
returnStrs += encryptedDatas[i].ToString("X2");
}
return returnStrs;
}
catch (Exception e)
{
return e.Message;
}
}
调用解密函数string desjms = DecryptDES("0DA06156D09594C3", "3837363534333231");
应返回3132333435363738 为正确
解决方案 »
- 如何能通过一个sql 语句查询 20个数据库中相同表的数据?
- c#如何获取该网页的内容
- 初学C#的超级小白求前辈指点一个小问题。
- 关于C#操作ACESS的问题
- 错误 1 验证 (): 元素“html”出现的次数太少。
- 想知道SPY++的一些具体细节~
- 怎样取得映射盘的原路径啊??急~~在线等待~~~~·大家帮帮忙啊~~~~~~~~
- WEBFORM 中如何实现 在同一个文件夹 有N个文件想上传,选择打开文件夹 并将其中的文件名文件读入一个ListItem
- 请问C#如何开发EA插件
- 有没有地方可以下到Visual Studio.net???
- c# 怎么实现ftp 返回上一级目录
- 数组中空值的问题~
static byte[] rgbKey = { 22, 33, 97, 10, 5, 7, 67, 38 }; //des加密钥匙
static byte[] rgbIV = { 10, 23, 34, 45, 51, 99, 27, 68 };//des解密钥匙 /// <summary>
/// des加密字符串
/// </summary>
/// <param name="encryptString">需要加密的字符串</param>
/// <returns></returns>
public static string DESEncrypt(string encryptString)
{
try
{
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, desc.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
{
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
}
return Convert.ToBase64String(mStream.ToArray());
}
}
catch
{
return encryptString;
}
} /// <summary>
/// des解密字符串
/// </summary>
/// <param name="decryptString">要解密的字符串</param>
/// <returns></returns>
public static string DESDecrypt(string decryptString)
{
try
{
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, desc.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
{
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
}
return Encoding.UTF8.GetString(mStream.ToArray());
}
}
catch
{
return decryptString;
}
}
可按照我的数据和密钥解出相对应的数据即可。。谢谢!