.NET CORE接入微信支付V3接口遇到的平台证书AEAD_AES_256_GCM解密问题
对接微信支付V3的接口,可以算是从1开始踩坑,多的不说,先记录一下这个平台证书的问题。 在拿到这个AEAD_AES_256_GCM加密后的证书内容,需要去做解密,这个时候很尴尬的,微信这边仅仅提供了php和java版本的。 而我是.NET CORE3.1版本的 找了半天资料,很容易发现有一个类可以实现AESGCM的加解密:AesGcm Decrypt(byte[] nonce, byte[] ciphertext, byte[] tag, byte[] plaintext, byte[] associatedData = null) 可以看到需要提供这么几个参数 其中关于tag,微信文档也没用明确提出应该怎么去获取,最终找遍了全网都没发现有文章说怎么获取。 于是乎只有参考一下微信提供的php示例以及java示例 看了java示例没有发现有tag的存在,最终在php示例里边找到了tag的获取方式 [图片] tag的获取方式: 在进行base64解码后,证书密文是证书密文长度-16,tag=证书密文最后16个字节 [图片] var gcm = new AesGcm(Encoding.UTF8.GetBytes("APIV3密钥"));
byte[] cipherTextBytes = Convert.FromBase64String("平台证书ciphertext字段");
byte[] nonce = Encoding.UTF8.GetBytes("平台证书nonce字段");
byte[] ciphertext = cipherTextBytes.Take(cipherTextBytes.Length - 16).ToArray();
byte[] plaintext = new byte[ciphertext.Length];
byte[] tag = cipherTextBytes.Skip(ciphertext.Length).Take(16).ToArray();
byte[] associatedData = Encoding.UTF8.GetBytes("平台证书associated_data字段");
gcm.Decrypt(nonce, ciphertext, tag, plaintext, associatedData);
string text = Encoding.UTF8.GetString(plaintext);