/// <summary>
/// 解密方法:Des3Encode(密文, 密钥)
/// </summary>
/// <param name="text"></param>
/// <param name="strKey"></param>
/// <returns></returns>
public static string Des3Decode(string text, string strKey)
{
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
byte[] key = build3DesKey(strKey);
byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
byte[] data = Convert.FromBase64String(text);
byte[] str2 = Des3DecodeECB(key, iv, data);
return System.Text.Encoding.UTF8.GetString(str2).TrimEnd('\0');
}
/// <summary>
/// DES3 ECB模式解密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV(当模式为ECB时,IV无用)</param>
/// <param name="str">密文的byte数组</param>
/// <returns>明文的byte数组</returns>
static byte[] Des3DecodeECB(byte[] key, byte[] iv, byte[] data)
{
MemoryStream msDecrypt = new MemoryStream(data);
TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider();
tdsp.Mode = CipherMode.ECB;
tdsp.Padding = PaddingMode.PKCS7;
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
tdsp.CreateDecryptor(key, iv),
CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[data.Length];
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return fromEncrypt;
}
/// <summary>
/// 装成24位字节数组
/// </summary>
/// <param name="keyStr"></param>
/// <returns></returns>
static byte[] build3DesKey(String keyStr)
{
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
byte[] key = new byte[24];
byte[] temp = utf8.GetBytes(keyStr);
if (key.Length > temp.Length)
{
System.Array.Copy(temp, 0, key, 0, temp.Length);
}
else
{
System.Array.Copy(temp, 0, key, 0, key.Length);
}
return key;
}
/// <summary>
/// base64转string
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string getbase64tostring(string text)
{
byte[] data = Convert.FromBase64String(text);
return System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0');
}