商家转账 提示错误 “请确认待处理的消息是否为加密后的密文” 敏感字段加密如何解决?

67 阅读1分钟

错误是由于发起转账时 user_name字段有值导致的(不传值时正常)

虽然对这个字段进行了加密 但是请求后依然出现以上错误(请求逻辑如下图),搞了很久都没成功。

谁有成功案例可以分享下?能帮助快速解决问题的,愿意发百元红包以表谢意!

谁有成功案例可以分享下?能帮助快速解决问题的,愿意发百元红包以表谢意!

谁有成功案例可以分享下?能帮助快速解决问题的,愿意发百元红包以表谢意!

image.png 加密方法实现如下(官方示例不能正常执行)

image.png

原始代码如下

public static string GenerateMerchantSignature(this X509Certificate2 x509, string method, string url, string timestamp, string nonce, string body,
    HashAlgorithmName hashAlgorithm, RSASignaturePadding? padding = null)
{
    var signMessage = $"{method}\n{url}\n{timestamp}\n{nonce}\n{body ?? string.Empty}\n";
    return x509.GenerateSignature(signMessage, hashAlgorithm, padding);
}

public static string GenerateSignature(this X509Certificate2 x509, string message, string hashAlgorithmName = "SHA256", RSASignaturePadding? padding = null)
    => GenerateSignature(x509, message, new HashAlgorithmName(hashAlgorithmName), padding);

public static string GenerateSignature(this X509Certificate2 x509, string message, HashAlgorithmName hashAlgorithm, RSASignaturePadding? padding = null)
{
    try
    {
        using var rsa = x509.GetRSAPrivateKey();

        byte[] dataBytes = Encoding.UTF8.GetBytes(message);
        byte[] signatureBytes = rsa.SignData(dataBytes, hashAlgorithm, padding ?? RSASignaturePadding.Pkcs1);

        return Convert.ToBase64String(signatureBytes);
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
        throw;
    }
}