【小5聊】.net core2.1解密微信退款req_info加密串

不得不说,现在的技术更新换代太快了,刚掌握好一个方向的技术点,一下子就被替换成了另一个框架。

.net framework框架还没用熟悉,.net core框架就马不停蹄的更新换代了

2022年05月04日前,网上还是很多停留在.net framework版本解密代码

不过,不管技术如何迭代更新,掌握原理和理解需求不会变

1、官网文档说明

地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10

解密方式
解密步骤如下:
(1)对加密串A做base64解码,得到加密串B
(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )

(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)

2、base64解码

对加密串A做base64解码,得到加密串B

注意:此处的解码有一个前提,就是key值,这里的解码只用到了base64字符串转为byte[]字节,然后再根据第二条说明,结合key进行解码,请继续往第3点看

  •  在解码前,先来了解下,base64加解密方法的使用
/// <summary>
/// 编码:字符串转为Base64,编码格式为UTF8
/// </summary>
/// <param name="content">加密内容</param>
/// <returns></returns>
public static string Base64ToEncode(string content)
{
    byte[] bytes = Encoding.UTF8.GetBytes(content);
    string base64_string = Convert.ToBase64String(bytes);
    return base64_string;
}
/// <summary>
/// 解码:Base64转为字符串文本
/// </summary>
/// <param name="content">解密内容</param>
/// <returns></returns>
public static string Base64ToDecode(string content)
{
    byte[] bytes = Convert.FromBase64String(content);
    string text_string = Encoding.UTF8.GetString(bytes);
    return text_string;
}
  • 效果如下
string text = "<xml>test</xml>";
string base64 = Base64ToEncode(text); //PHhtbD50ZXN0PC94bWw+
string xml_text = Base64ToDecode(req_info); //

 3、商户key转MD4

对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )

public static string Md5Encrypt(string text)
{
    MD5 md5 = new MD5CryptoServiceProvider();
    var data = Encoding.UTF8.GetBytes(text);
    var encs = md5.ComputeHash(data);
    return BitConverter.ToString(encs).Replace("-", "");
}

#region 程序集 netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
#endregion

4、实际上解码方法

用key*对加密串B做AES-256-ECB解密(PKCS7Padding)

public static string DecodeAES256ECB(string str, string key)
{
    string result = string.Empty;

    try
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        byte[] toEncryptArray = Convert.FromBase64String(str);
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        result = UTF8Encoding.UTF8.GetString(resultArray);
    }
    catch(Exception exception)
    {

    }

    return result;
}

5、解码效果

温馨提示:在开发过程中若遇到疑问,可讨论解决,相互学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值