首页 > 微信 > 详细

支付宝IOT小程序AES密钥解密

时间:2019-11-13 10:24:00      阅读:211      评论:0      收藏:0      [点我收藏+]

 

 

实际测试 KEY 是 16个 byte,byte[] byteKEY = System.Convert.FromBase64String(key);     注意:是Convert.FromBase64String转 byte[] ,  而不是 Encoding.UTF8.GetBytes 转 byte[]   。

IV 也是 16个 byte,全是0;

 

--

 

/// <summary>
        /// 支付宝小程序AES密钥解密
        /// </summary>
        /// <param name="decryptStr"></param>
        /// <param name="key">小程序后台设置里的AES密钥</param>
        /// <returns></returns>
        public static string AliPayLittleAppAesDecrypt(string decryptStr, string key)
        {
            //IV 16 个 byte 都是 0
            int ivSize = 16;
            byte[] iv = new byte[ivSize];
            for (int i = 0; i < ivSize; ++i)
            {
                iv[i] = 0;
            }

            //https://docs.open.alipay.com/common/104567
            //支付宝小程序的AES密钥串是BASE64编码过的,所以这里的BYTE KEY 是 System.Convert.FromBase64String
            //转换后,16 个 byte,是AES128。
            byte[] byteKEY = System.Convert.FromBase64String(key);             

            byte[] byteDecrypt = System.Convert.FromBase64String(decryptStr);

            var _aes = new RijndaelManaged();
            _aes.Padding = PaddingMode.PKCS7;
            _aes.Mode = CipherMode.CBC;
            //重新指定下KEY和IV,让 RijndaelManaged自动计算KEYSIZE;   
            _aes.Key = byteKEY;      
            _aes.IV = iv;            

            var _crypto = _aes.CreateDecryptor(byteKEY, iv);
            byte[] decrypted = _crypto.TransformFinalBlock(
                byteDecrypt, 0, byteDecrypt.Length);

            _crypto.Dispose();

            return Encoding.UTF8.GetString(decrypted);
        }

 

--

支付宝IOT小程序AES密钥解密

原文:https://www.cnblogs.com/runliuv/p/11846938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!