static string key = "abcefghk"; //定义密钥
/// <summary> /// 加密字符串
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string encryptString)
{
var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
var keyIV = keyBytes;
var inputByteArray = Encoding.UTF8.GetBytes(encryptString);
var provider = new DESCryptoServiceProvider();
var mStream = new MemoryStream();
var cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
var str = Convert.ToBase64String(mStream.ToArray());
return str.Replace("+", "%2B");
}
public static string Decrypt(string decryptString)
{
var count = decryptString.Length;
var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
var keyIV = keyBytes;
var inputByteArray = Convert.FromBase64String(decryptString);
var provider = new DESCryptoServiceProvider();
var mStream = new MemoryStream();
var cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
注意事项:(1)定义密钥时字符串长度为4的倍数 不然在解密的时候会出现报异常 字符串长度问题
(2)字符串进行了加密后 如果字符串中有符号+ 替换为 str.Replace("+", "%2B"); 原因是浏览器接收加密后的字符串 request 请求回来时会自动解密一次,+号都变为了空格
解密 会抛出 字符串长度问题。 这两个问题让我纠结了好久 出现其他问题下次再记录
</pre><pre name="code" class="csharp">