/// <summary>
/// 使用DES加密指定字符串
/// </summary>
/// <param name="encryptStr">待加密的字符串</param>
/// <param name="key">密鑰(最大長度8)</param>
/// <param name="IV">初始化向量(最大長度8)</param>
/// <returns>加密後的字符串</returns>
public static string DESEncrypt(string encryptStr,string key,string IV)
{
//將key和IV處理成8個字符
key += "12345678";
IV += "12345678";
key = key.Substring(0,8);
IV = IV.Substring(0,8);
SymmetricAlgorithm sa;
ICryptoTransform ict;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
sa = new DESCryptoServiceProvider();
sa.Key = Encoding.UTF8.GetBytes(key);
sa.IV = Encoding.UTF8.GetBytes(IV);
ict = sa.CreateEncryptor();
byt = Encoding.UTF8.GetBytes(encryptStr);
ms = new MemoryStream();
cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
//加上一些干擾字符
string retVal = Convert.ToBase64String(ms.ToArray());
System.Random ra = new Random();
for (int i=0;i<8;i++)
{
int radNum = ra.Next(36);
char radChr = Convert.ToChar(radNum + 65);//生成一個隨機字符
retVal = retVal.Substring(0,2*i+1) + radChr.ToString() + retVal.Substring(2*i+1);
}
return retVal;
}
/// <summary>
/// 使用DES解密指定字符串
/// </summary>
/// <param name="encryptedValue">待解密的字符串</param>
/// <param name="key">密鑰(最大長度8)</param>
/// <param name="IV">初始化向量(最大長度8)</param>
/// <returns>解密後的字符串</returns>
public static string DESDecrypt(string encryptedValue,string key,string IV)
{
//去掉干擾字符
string tmp = encryptedValue;
if (tmp.Length < 16)
{
return "";
}
for (int i=0;i<8;i++)
{
tmp = tmp.Substring(0,i+1) + tmp.Substring(i+2);
}
encryptedValue = tmp;
//將key和IV處理成8個字符
key += "12345678";
IV += "12345678";
key = key.Substring(0,8);
IV = IV.Substring(0,8);
SymmetricAlgorithm sa;
ICryptoTransform ict;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
try
{
sa = new DESCryptoServiceProvider();
sa.Key = Encoding.UTF8.GetBytes(key);
sa.IV = Encoding.UTF8.GetBytes(IV);
ict = sa.CreateDecryptor();
byt = Convert.FromBase64String(encryptedValue);
ms = new MemoryStream();
cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (System.Exception)
{
return "";
}
}
c# DES加密解密算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.