以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助base64解码后是乱码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184569)

--  作者:tianhao0817
--  发布时间:2022/12/14 10:12:00
--  求助base64解码后是乱码
U9AWglrlBSpsWGmMH4JRUqsoZ6GKgfuHt8JODGRUhbCG3JZo2lDk4nu/0ANvoJPEh9D0soQh/C1WE2PUUo2K2Fb9Vt/jONAUKqNEuUQ2j+Rwyivz08EVNXRO6SjgLGsNrUyh829AJ4i3EpY4X+6hbeCB5FXlKCLsxJu7t2cNPNygrMbcmmb9rVLLcTIfAOOG/wtZvSsnrth8v1qrPQj+t4kVlcejtL7ZGUqBpX8486Vq3oMgCGshK9ZfDWUddKZxtrDp3VKusLNgUV1oL4ZXvMKqRBJX+GDLB/qXG37wpOeNfa3E/6F5N/cv2NjTmuLR85RWH4QKHnR5xsEq3Or02A==

Dim signedFromUmt As String = System.Text.Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(str))

Output.Show(signedFromUmt )


Dim Str1 As String = System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(str))

Output.Show(str1)


S??Z?*lXi??QR?(g???????N dT????h?P??{??o??????!?-Vc?R???V?V??8?*?D?D6??p?+???5tN?(?,k
?L??o@\'???8_?m??U?("?ě??g
<????f??R?q2

S?俍?*lXi?俀R?g侞嚪翹 dT叞嗆杊赑溻{啃o爴膰恤矂!?Vc訰崐豓齎咩8?*笵6忎p?笥?5tN??k
璍◇o@\'埛?_睢m鄟銾?"炷浕穏
<軤軞fR藂2



乱码,请问一下蓝老师该怎么处理?
[此贴子已经被作者于2022/12/14 10:15:47编辑过]

--  作者:有点蓝
--  发布时间:2022/12/14 10:37:00
--  
解码规则是什么?
--  作者:tianhao0817
--  发布时间:2022/12/14 10:44:00
--  

获取应答签名

微信支付的应答签名通过HTTP头Wechatpay-Signature传递。(注意,示例因为排版可能存在换行,实际数据应在一行)

Wechatpay-Signature: CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==

Wechatpay-Signature的字段值使用Base64进行解码,得到应答签名。

某些代理服务器或CDN服务提供商,转发时会“过滤”微信支付扩展的HTTP头,导致应用层无法取到微信支付的签名信息。商户遇到这种情况时,我们建议尝试调整代理服务器配置,或者通过直连的方式访问微信支付的服务器和接收通知。

验证签名

很多编程语言的签名验证函数支持对验签名串和签名 进行签名验证。强烈建议商户调用该类函数,使用微信支付平台公钥对验签名串和签名进行SHA256 with RSA签名验证。

下面展示使用命令行演示如何进行验签。假设我们已经获取了平台证书并保存为1900009191_wxp_cert.pem 。

首先,从微信支付平台证书导出微信支付平台公钥

$ openssl x509 -in 1900009191_wxp_cert.pem -pubkey -noout > 1900009191_wxp_pub.pem
$ cat 1900009191_wxp_pub.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4zej1cqugGQtVSY2Ah8R
MCKcr2UpZ8Npo+5Ja9xpFPYkWHaF1Gjrn3d5kcwAFuHHcfdc3yxDYx6+9grvJnCA
2zQzWjzVRa3BJ5LTMj6yqvhEmtvjO9D1xbFTA2m3kyjxlaIar/RYHZSslT4VmjIa
tW9KJCDKkwpM6x/RIWL8wwfFwgz2q3Zcrff1y72nB8p8P12ndH7GSLoY6d2Tv0OB
2+We2Kyy2+QzfGXOmLp7UK/pFQjJjzhSf9jxaWJXYKIBxpGlddbRZj9PqvFPTiep
8rvfKGNZF9Q6QaMYTpTp/uKQ3YvpDlyeQlYe4rRFauH3mOE6j56QlYQWivknDX9V
rwIDAQAB
-----END PUBLIC KEY-----
Java支持使用证书初始化签名对象,详见 initVerify(Certificate),并不需要先导出公钥。

然后,把签名base64解码后保存为文件signature.txt

$ openssl base64 -d -A <<< \\ \'CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==\' > signature.txt

最后,验证签名

$ openssl dgst -sha256 -verify 1900009191_wxp_pub.pem -signature signature.txt << EOF
1554209980
c5ac7061fccab6bf3e254dcf98995b8c
{"data":[{"serial_no":"5157F09EFDC096DE15EBE81A47057A7232F1B8E1","effective_time":"2018-03-26T11:39:50+08:00","expire_time":"2023-03-25T11:39:50+08:00","encrypt_certificate":{"algorithm":"AEAD_AES_256_GCM","nonce":"d215b0511e9c","associated_data":"certificate","ciphertext":"..."}}]}
EOF
Verified OK

--  作者:有点蓝
--  发布时间:2022/12/14 10:59:00
--  
要使用证书对内容进行解密解码的。找他们官方要.net的代码