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收单服务平台证书生成及使用指引相关推荐

  1. 客客威客V3.3外包任务发布接单服务平台

    客客威客V3.3外包任务发布接单服务平台,一站式软件开发外包服务平台响应式源码,赠送安装指导文档+二次开发手册 后台管理包括:项目众包,数据直观统计.财务管理.任务审核.支付宝和微信在线支付配置 功能 ...

  2. 微信支付V3 生成平台证书

    微信支付V3里必须有平台证书文件,才能唤起唤醒支付 平台证书生成前提需要提前下载好设置apikey3后下载的证书3个证书文件 apiclient_key.pem apiclient_cert.pem ...

  3. HTTPS原理与证书生成

    原文链接: HTTPS原理与证书生成 HTTPS HTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

  4. 微信支付v3平台证书

    微信支付v3平台证书生成详细过程 下载地址:GitHub - wechatpay-apiv3/CertificateDownloader: Java 微信支付 APIv3 平台证书的命令行下载工具 生 ...

  5. 卡拉上市在即 以终端收单切入谋求平台升级

    拉卡拉上市之路 3月26日,拉卡拉首发申请获证监会通过,其上市之路获得了重大突破和进展,第三方支付行业即将迎来A股第一股.有业内人士表示,拉卡拉上市无疑给整个行业带来更多想象力.未来,或许会有更多的第 ...

  6. PHP开发微信支付小微商户V3版本 图片上传、生成签名、平台证书获取、平台证书编号、敏感信息加密

    吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书.什么是商户API证书...... 好了废话不多说下面明确几个名词: 商户API证书:是由权威CA颁发,用于有关微信支付等操作API接口使 ...

  7. fabric-ca服务构建及证书生成

    前言: 1.为了保证在网络通信过程中信息的安全性,fabric可以设置tls网络通信模式,这就需要我们来生成相关的数字签名证书.关于tls通信需要数字证书的原因以及通信过程,见tls安全网络传输 2. ...

  8. PayPal/Stripe/Square轮询收单系统附赠服务

    为了更好地方便客户,PayPal/Stripe/Square轮询收单系统推出附赠服务 1.免费帮助搭建B站(限10个)服务 2.免费搭建A站(不包装修)及上传产品(限1个)服务 3.免费提供网站转移( ...

  9. 微信支付V3平台证书本地生成的坑

    废话不多说直接说问题. ~~~~~~~~~ 今天对接微信支付获取平台证书工具时,使用官方命令一直报错无法生成真让人头大. 俗话说只要思想不滑坡,办法总比困难多.把源码拿过来自己跑,然后又又又遇到了问题 ...

最新文章

  1. python能和c语音交互吗_Python与C交互概述
  2. VTK:图表之AdjacencyMatrixToEdgeTable
  3. 也记一次性能优化:LINQ to SQL中Contains方法的优化
  4. node.js和npm的关系
  5. 大话synchronize底层原理
  6. linux(虚拟机中)与windows共享文件两种方法
  7. mysql 端口 telnet 不通_3306端口不通,不一定是网络的问题
  8. Tomcat(三):日志
  9. Qt工作笔记-设置窗体底纹以及控件透明度
  10. 118. PHP 性能问题
  11. web开发需要注意/n的问题
  12. GNS3环境搭建与测验实战图文详解
  13. 计算机房防凝露保温材料,机房保温的方案.docx
  14. 奔跑吧攻城狮 第一篇
  15. 【C语言练习——打印上三角及其变形】
  16. 【九度】题目1374:所有员工年龄排序
  17. Python数据可视化案例:分析微信公众号数据
  18. 人体体重秤体脂秤方案PCBA设计
  19. Ubuntu22.04安装gcc-5和g++-5
  20. MySQL 5.7 表分区技术(二):RANGE分区

热门文章

  1. 抖音分享页用户信息爬取
  2. 李开复:移动互联网最大的赚钱机会在哪里
  3. 文本分布式表示(三):用gensim训练word2vec词向量
  4. 微信公众号怎么用html代码吗,微信公众号文章怎么使用代码排版?
  5. 和CM4核心板同尺寸的4G模块硬件介绍,可搭建塔式结构,即插即用免驱
  6. 西安电子科技大学专业英语考试总结
  7. 怎么把微信的表情包保存到手机
  8. POJ3155Hard Life(最大密度子图:最大权闭合图)
  9. MobileNetv1、v2网络详解、使用pytorch搭建模型MobileNetv2并基于迁移学习训练
  10. 【龙芯1c库】封装硬件定时器接口和使用示例