為防止信息在傳輸過程中被黑客竊取,需要對于敏感的客戶秘鑰信息進行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。