最近与别的系统做短信发送的对接,往其他系统通过post方式发送时,需先对数据进行3DES加密,再通过BASE64位编码,转换成正确字符串后发送过去。
在网上搜索到两个加密与解密的方法:
/// <summary>
/// 加密
/// </summary>
/// <param name="a_strString"></param>
/// <param name="a_strKey"></param>
/// <returns></returns>
public static string Encrypt3DES(string a_strString, string a_strKey)
{
TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
byte[] b=ASCIIEncoding.ASCII.GetBytes(a_strKey);
DES.Key = ASCIIEncoding.ASCII.GetBytes(a_strKey);
DES.Mode = CipherMode.ECB;
ICryptoTransform DESEncrypt = DES.CreateEncryptor();
byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(a_strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
/// <summary>
/// 解密
/// </summary>
/// <param name="a_strString"></param>
/// <param name="a_strKey"></param>
/// <returns></returns>
public static string Decrypt3DES(string a_strString, string a_strKey)
{
TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(a_strKey);
DES.Mode = CipherMode.ECB;
DES.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();
string result = "";
try
{
byte[] Buffer = Convert.FromBase64String(a_strString);
result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
catch (Exception e)
{
}
return result;
}
在具体使用过程中,对方提供的密钥是经过BASE64位编码的字符串,在调用这两个方法时,需先先把密钥转换成普通字符串,再调用加密、解密方法。
具体代码如下:
string strMiyao = txtmiyao.Text.Trim();//得到密钥
//密钥解密
byte[] bytes = Convert.FromBase64String(strMiyao);
string stryao = Encoding.Default.GetString(bytes);
string strdaijiemi = txtdaijiemi.Text.Trim();//待加密字符串
txtjiemihou.Text = Decrypt3DES(strdaijiemi, stryao);//把加密后字符串赋值到文本框中。