为防止信息在传输过程中被黑客窃取,需要对于敏感的客户秘钥信息进行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。