为防止信息在传输过程中被黑客窃取,需要对于敏感的客户秘钥信息进行AES加密。AES加密大体过程如下:
一. 生成加密密钥。
1. 调用MakeMD5_16方法生成密钥password。
2. MakeMD5_16方法所需参数str即为菠萝派appsecret(请进入开放平台查看)。
3. 生成的password用于下文加密方法。
二. AES加密。
1. 调用AESEncrypt方法进行加密,text为待加密字符串,password即上文生成的密钥。
2. AES加密所需向量请向菠萝派值班技术索取。
三. 加密示例。
bizcontent={"a":"a1","b":"b1"}
appsecret=5ee2084de90043be989d4d99d0dd0eaa
根据上文算法得到加密后的文本:
var v=AESEncrypt(bizcontent, password)=5E309FC10461C44CF62554E0BE5DFF16447A35830F3084F40ABB042D23F381EF
C#签名示例代码
/// <summary>
/// AES加解密所需IV。
/// </summary>
private static byte[] iv = { 请向菠萝派值班人员索取};
/// <summary>
/// AES加密。
/// </summary>
/// <param name="text">待加密字符串</param>
/// <param name="password">密钥</param>
/// <returns></returns>
public string AESEncrypt(string text, string password)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
var rm = new RijndaelManaged();
rm.Mode = CipherMode.ECB;
rm.Padding = PaddingMode.PKCS7;
rm.KeySize = 128;
rm.BlockSize = 128;
var pwdBuffer = System.Text.Encoding.UTF8.GetBytes(password);
var keyBuffer = new byte[16];
int len = pwdBuffer.Length;
if (len > keyBuffer.Length) len = keyBuffer.Length;
System.Array.Copy(pwdBuffer, keyBuffer, len);
rm.Key = keyBuffer;
rm.IV = iv;
var transform = rm.CreateEncryptor();
var textBuffer = Encoding.UTF8.GetBytes(text);
var cipherBuffer = transform.TransformFinalBlock(textBuffer, 0, textBuffer.Length);
return BufferToHexString(cipherBuffer);
}
/// <summary>
/// Byte[]转换为16进制字符串。
/// </summary>
/// <param name="buffer">字节流</param>
/// <returns></returns>
private string BufferToHexString(byte[] buffer)
{
if (null == buffer)
return string.Empty;
var sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
sb.Append(buffer[i].ToString("X2"));
return sb.ToString();
}
/// <summary>
/// 字节流生成MD5码16进制。
/// </summary>
/// <param name="str">加密字符串</param>
/// <returns></returns>
public string MakeMD5_16(string str)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
byte[] byteOriginal = hashmd5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
string md5Str = BitConverter.ToString(byteOriginal, 4, 8);
md5Str = md5Str.Replace("-", "");
return md5Str;
}注意事项:
编码格式为utf-8。