近做微信支付 企业付款到银行卡,其中收款方银行卡号、收款方用户名需要获取RSA加密公钥API进行加密;本文以windows为例;
微信开发文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4
openssl下载地址:http://slproweb.com/products/Win32OpenSSL.html
获取接口:
首先要通过接口获取PKCS#1格式的公钥,再转为PKCS#8格式;
获取PKCS#1格式的公钥代码如下:
// 获取RSA加密公钥API地址 private final static String PUBLIC_KEY_URL = "https://fraud.mch.weixin.qq.com/risk/getpublickey"; // 证书位置 private final static String CertPath = "D:/apiclient_cert.p12"; /** * 获取公钥 PKCS#1 * * @return */ public static String getPublicKey() { SortedMap<String, String> sortedMap = new TreeMap<String, String>(); sortedMap.put("mch_id", MCH_ID); sortedMap.put("nonce_str", RandomNumber.getNonceStr()); sortedMap.put("sign_type", "MD5"); sortedMap.put("sign", createSign(sortedMap)); String requestXML = XMLUtil.getRequestXml(sortedMap); String resultXML = CertHttpUtil.postData(PUBLIC_KEY_URL, requestXML, MCH_ID, CertPath); return resultXML; }
生成noceStr:
/** * 生成NonStr 雪花算法 * * @return * @throws Exception */ public static String getNonceStr() { Integer workId = Integer.valueOf(1); IdWorker idWork = new IdWorker(workId); String nonceStr = ""; try { nonceStr = workId + String.valueOf(idWork.nextId()); } catch (Exception e) { e.printStackTrace(); } return nonceStr; }
执行getPublicKey方法,得到反馈的XML,其中pub_key是PSCK#1公钥,将pub_key保存
新建个PKCS1.pem, 将上面的pub_key保存
dos命令进入到openssl的bin目录下:
执行PKCS#1转PKCS#8命令:
openssl rsa -RSAPublicKey_in -in D:\cert\weChatApp\PKCS1.pem -pubout
新建个PSCK8文件,将生成的KEY保存
这样就完成了 PKCS#1转PKCS#8 获取RSA加密公钥
原文地址:https://www.cnblogs.com/zengweiB208/p/9028841.html
时间: 2024-10-14 00:39:56