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. html5简单拖拽实现自动左右贴边+幸运大转盘
  2. SRM598 Div1
  3. [老老实实学WCF] 第七篇 会话
  4. 两台centos之间传送文件
  5. Python字符串和正则表达式中的反斜杠(‘\‘)问题
  6. C#获取类名为Internet_Explorer_Server控件的内容
  7. 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
  8. LeetCode 2171. 拿出最少数目的魔法豆(排序)
  9. C语言中的正负数及其输出
  10. php json_encode小数精度丢失的问题
  11. 更改API级别的Android Studio
  12. jqueryAjax的使用
  13. python与excel-Python与Excel(1)
  14. centos时间同步
  15. 谷歌自动广告导致网站样式出错 影响布局
  16. c51单片机音乐门铃C语言程序,51单片机音乐门铃的设计
  17. BuBu笔记——Mybatis深入(秃头BUBu的超详细备注,一定要看哦)
  18. 秋招总结帖,还愿牛客
  19. 软件工程大作业——设计阶段
  20. C# 有符号整数 无符号整数

热门文章

  1. QGuiApplication
  2. 微信公众号推广的十个技巧
  3. 心得体会 :转型到数据分析师(亲身经历)
  4. 我,ChatGPT,站在谷歌的肩膀上,让谷歌紧张
  5. 常用制作——RJ45 网线
  6. 手机浏览器下载哪个好用
  7. 如何切换服务器安全狗云账号,服务器安全狗v4.0 账号保护操作教程
  8. 2020.7.22 T3押韵(jz暑假训练day7)
  9. 剑三pve人最多服务器,DPS排名现状 论剑三PVE不合理的根本
  10. 新手如何学习3D建模?这几个关键步骤,让你少走很多弯路