.Net中 DES加密 ECB模式 PKCS7的代码,已经测试过可以直接使用:
加密方法:
/// <summary>
/// 加密字符串
/// 加密密钥必须为8位
/// </summary>
/// <param name="strText">被加密的字符串</param>
/// <param name="strEncrKey">8位长度密钥</param>
/// <returns>加密后的数据</returns>
public static string DesEncrypt(string strText, string strEncrKey)
{
if(strEncrKey.Length < 8)
{
throw new Exception("密钥长度无效,密钥必须是8位!");
}
StringBuilder ret = new StringBuilder();
using var des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
des.Key = Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8));
//des.IV = Encoding.ASCII.GetBytes(strEncrKey.Substring(0, 8));
MemoryStream ms = new MemoryStream();
using var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
var res = Convert.ToBase64String(ms.ToArray());
return UrlEncodeFromJava(res);
}
解密方法:
/// <summary>
/// ECB解密
/// </summary>
/// <param name="data">解密字符串</param>
/// <param name="key">秘钥</param>
/// <returns></returns>
public static string DesDecrypt(string data, string key)
{
using var des = new DESCryptoServiceProvider();
des.Key = Encoding.UTF8.GetBytes(key.Substring(0, 8));
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
MemoryStream memory;
CryptoStream crypto;
byte[] byt;
byt = Convert.FromBase64String(data);
memory = new MemoryStream();
crypto = new CryptoStream(memory, des.CreateDecryptor(), CryptoStreamMode.Write);
crypto.Write(byt, 0, byt.Length);
crypto.FlushFinalBlock();
crypto.Close();
return Encoding.UTF8.GetString(memory.ToArray());
}