UPI收单服务平台证书生成及使用指引
UPI收单服务平台证书生成及使用指引
1 证书生成
证书生成可以登录到Linux服务器上使用如下命令生成:
Lenght 2048 :
openssl genrsa -out private_signature_2048.key 2048
openssl req -new -x509 -key private_signature_2048.key -out public_signature_2048.cer -set_serial 201806211822
说明:
1、 private_signature_2048.key是生成的证书私钥
2、 2048是证书的位数。
3、 public_signature_2048.cer是生成的证书公钥
4、 201806211822为证书序列号,亦可根据自身需求填写
2 提取公钥字符串
以下是从生成的证书公钥public_signature_2048.cer中提取公钥字符串的方法,其中“file:///D:/public_signature_2048.cer”表示public_signature_2048.cer所在磁盘路径。提取的公钥字符串(public key string)用于提供银联国际进行参数配置。
public static void main(String[] args) throws Exception {URL url=null;try {url = new URL("file:///D:/public_signature_2048.cer");} catch (MalformedURLException e1) {e1.printStackTrace();}System.out.println("公钥所在路径:"+url.getFile()); X509Certificate cert = null;try {cert = X509Certificate.getInstance(new FileInputStream(url.getFile()));} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} PublicKey publicKey = cert.getPublicKey(); String publicKeyString = "";try {publicKeyString = Base64Utils.encode(publicKey.getEncoded());} catch (Exception e) {e.printStackTrace();}System.out.println("-----------------public key--------------------"); System.out.println(publicKeyString); System.out.println("-----------------public key--------------------");}
3 签名示例代码
public static String signUais(byte[] data, String privateKey) throws Exception { MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");messageDigest.update(data);byte[] hashData = messageDigest.digest();byte[] keyBytes = Base64Utils.decode(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec); Signature signature = Signature.getInstance("NONEWithRSA"); signature.initSign(privateK); signature.update(hashData); byte[] sign = signature.sign();System.out.println(DigitalTrans.byte2hex(sign));return Base64Utils.encode(sign);
}
4 验签示例代码
public static boolean verifyUais(byte[] data, String publicKey, String sign) throws Exception {MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");messageDigest.update(data);byte[] hashData = messageDigest.digest();byte[] keyBytes = Base64Utils.decode(publicKey);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicK = keyFactory.generatePublic(keySpec);Signature signature = Signature.getInstance("NONEWithRSA");signature.initVerify(publicK);signature.update(hashData);return signature.verify(Base64Utils.decode(sign));}
5 加密示例代码
private static final int MAX_ENCRYPT_BLOCK = 117;private static String encryptByPublicKey(byte[] data, String publicKey) throws Exception {byte[] keyBytes = Base64Utils.decode(publicKey);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");Key publicK = keyFactory.generatePublic(x509KeySpec);// 对数据加密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, publicK);int inputLen = data.length;ByteArrayOutputStream out = new ByteArrayOutputStream();int offSet = 0;byte[] cache;int i = 0;// 对数据分段加密while (inputLen - offSet > 0) {if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);} else {cache = cipher.doFinal(data, offSet, inputLen - offSet);}out.write(cache, 0, cache.length);i++;offSet = i * MAX_ENCRYPT_BLOCK;}byte[] encryptedData = out.toByteArray();out.close();return Base64Utils.encode(encryptedData);}
6 解密示例代码
public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) throws Exception { byte[] keyBytes = Base64Utils.decode(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateK); int inputLen = encryptedData.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 对数据分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); } else { cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return decryptedData; }
UPI收单服务平台证书生成及使用指引相关推荐
- 客客威客V3.3外包任务发布接单服务平台
客客威客V3.3外包任务发布接单服务平台,一站式软件开发外包服务平台响应式源码,赠送安装指导文档+二次开发手册 后台管理包括:项目众包,数据直观统计.财务管理.任务审核.支付宝和微信在线支付配置 功能 ...
- 微信支付V3 生成平台证书
微信支付V3里必须有平台证书文件,才能唤起唤醒支付 平台证书生成前提需要提前下载好设置apikey3后下载的证书3个证书文件 apiclient_key.pem apiclient_cert.pem ...
- HTTPS原理与证书生成
原文链接: HTTPS原理与证书生成 HTTPS HTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...
- 微信支付v3平台证书
微信支付v3平台证书生成详细过程 下载地址:GitHub - wechatpay-apiv3/CertificateDownloader: Java 微信支付 APIv3 平台证书的命令行下载工具 生 ...
- 卡拉上市在即 以终端收单切入谋求平台升级
拉卡拉上市之路 3月26日,拉卡拉首发申请获证监会通过,其上市之路获得了重大突破和进展,第三方支付行业即将迎来A股第一股.有业内人士表示,拉卡拉上市无疑给整个行业带来更多想象力.未来,或许会有更多的第 ...
- PHP开发微信支付小微商户V3版本 图片上传、生成签名、平台证书获取、平台证书编号、敏感信息加密
吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书.什么是商户API证书...... 好了废话不多说下面明确几个名词: 商户API证书:是由权威CA颁发,用于有关微信支付等操作API接口使 ...
- fabric-ca服务构建及证书生成
前言: 1.为了保证在网络通信过程中信息的安全性,fabric可以设置tls网络通信模式,这就需要我们来生成相关的数字签名证书.关于tls通信需要数字证书的原因以及通信过程,见tls安全网络传输 2. ...
- PayPal/Stripe/Square轮询收单系统附赠服务
为了更好地方便客户,PayPal/Stripe/Square轮询收单系统推出附赠服务 1.免费帮助搭建B站(限10个)服务 2.免费搭建A站(不包装修)及上传产品(限1个)服务 3.免费提供网站转移( ...
- 微信支付V3平台证书本地生成的坑
废话不多说直接说问题. ~~~~~~~~~ 今天对接微信支付获取平台证书工具时,使用官方命令一直报错无法生成真让人头大. 俗话说只要思想不滑坡,办法总比困难多.把源码拿过来自己跑,然后又又又遇到了问题 ...
最新文章
- html5简单拖拽实现自动左右贴边+幸运大转盘
- SRM598 Div1
- [老老实实学WCF] 第七篇 会话
- 两台centos之间传送文件
- Python字符串和正则表达式中的反斜杠(‘\‘)问题
- C#获取类名为Internet_Explorer_Server控件的内容
- 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
- LeetCode 2171. 拿出最少数目的魔法豆(排序)
- C语言中的正负数及其输出
- php json_encode小数精度丢失的问题
- 更改API级别的Android Studio
- jqueryAjax的使用
- python与excel-Python与Excel(1)
- centos时间同步
- 谷歌自动广告导致网站样式出错 影响布局
- c51单片机音乐门铃C语言程序,51单片机音乐门铃的设计
- BuBu笔记——Mybatis深入(秃头BUBu的超详细备注,一定要看哦)
- 秋招总结帖,还愿牛客
- 软件工程大作业——设计阶段
- C# 有符号整数 无符号整数