近期有项目需要用的Net(C#)进行DES解密,客户给出了JAVA的DES加密,需要转换成Net,搞了一天后成功了,现在贴出代码。我会将Net及Java的Demo打包,大家可自行下载。
开发过程中,JAVA和Net加密后的的格式虽然相同,但是字符始终不一样。后修改的了加密模式,即des.Mode = CipherMode.ECB,就成功了。以下代码均已测试通过。
/// <summary>
/// 进行DES加密。
/// </summary>
/// <param name="encryptString">要加密的字符串。</param>
/// <param name="encryptKey">密钥,且必须为8位。</param>
/// <returns>以默认格式返回的加密字符串。</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ToHexByte(encryptKey);
des.Mode = CipherMode.ECB;
byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = byteToHexStr(ms.ToArray());
ms.Close();
return str;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] inputByteArray = ToHexByte(decryptString);
des.Key = ToHexByte(decryptKey);
des.Mode = CipherMode.ECB;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
return Encoding.Default.GetString(ms.ToArray());
}
}
}
catch (Exception ex)
{
throw ex;
}
}