如何生成支付宝商户私钥和商户公钥攻略

如何生成支付宝商户私钥和商户公钥攻略,第1张

*** 作步骤

(1)下载开发指南和集成资料

登录支付宝,点击 我的商家服务->手机无线收款->快捷支付(无线)

(2)解压下载的压缩包磨枝(WS_SECURE_PAY),找到坦乎并解压 openssl-0.9.8k_WIN32(RSA 密钥生成工具).zip 工具包

(3)生成原始RSA商户私钥文件

假设解压后的目录为 c:\alipay,命令行进入目录 C:\alipay\bin,执行“openssl genrsa -out rsa_private_key.pem 1024”,在 C:\alipay\bin 下会生成文件rsa_private_key.pem, 其内容为原始的商户私钥(请妥善保存该文件)

(4)将原始RSA商户私钥转换为pkcs8格式

命令行执行“ openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt”得到转换为 pkcs8 格式的私钥。复制下图红框内的内容至新建 txt 文档, 去掉换行,最后另存为“private_key.txt”(请妥善保存,签名时使用)。

(5)生成RSA商户公钥

命令行执行“ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”, 在 C:\alipay\bin 文件夹下生成文件 rsa_public_key.pem。接着用记事本打开 rsa_public_key.pem,复制全部内容至新建的 txt 文档,删除文件头“-----BEGIN PUBLIC KEY-----”与文件尾“-----END PUBLIC KEY-----”及空格、换行,如下图。最后得到一 行字符让游悉串并保存该 txt 文件为“public_key.txt”。

(6) 上传商户公钥至支付宝

浏览器访问 并用签约帐号登录,点击菜单栏“我的产品”,右侧点击“密钥管理”

点击“上传”,选择步骤(3)生成的“public_key.txt”并完成上传。

银联电子支付改版了,ecshop也有银联补丁,很多客户一直纠结银联导致怎么对接

下面模板堂给大家做一个详细的对接教程

1,

首先先打EC银联支付补丁

ecshop银联电子支付补丁.zip

解压后覆盖网站根目录!

2,

注册并且申请银联密钥

注册地址:http://www.chinapay.com/index.jsp

商户登录地址:http://console.chinapay.com/newgms/#

3,

下载密钥,并且上传网站data下pay文件夹(重要)

下载商户私钥的步骤:

1. 访问银联公司主页:http://www.chinapay.com/

(1)Openssl公私

使肆粗毁用Openssl公钥私钥用于外部商户系统xxx系统间报文安全性验证使用者需要公私钥直接报文进行处理则参考第四部计算摘要及签名值

1. 安装openssl步骤直接点击exe文件现需要安装vs2008插件直接忽略

2. 安装程找OpenSSL相应安装目录进入bin目录找openssl.exe执行文件点击运行别按顺序输入命令:

a. genrsa –out private-rsa.key 1024

说明:该命令没加密私钥

genrsa 私钥文件私钥存储private-rsa.key度1024out面指定输文件名

private-rsa.key 私钥文件该文件必须经处理私钥

b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer

说明:根据private-rsa.key证书public-rsa.cer

-new 表示新请求

-509 表示输证书结构

750表示证书效数

-out public-rsa.cer -out面表示公钥证书用于验证数字签名公钥证书或者公钥需要提前发送给需要验证本单位或部门数据接收

c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx

说明:PKCS12 格式Keystore

密码前输入要致密码用Keystore公私钥程用

Public-rsa.cer, private-rsa.key前

附1:

述代码99bill-rsa.pfx获取私钥Java版本代码private-rsa.key私钥直接使用必须进行定处理

代码几注意点:

文件流初始化路径需要根据自实际路径填写

密码第二节c步骤密码本实例输入suning

KeyStorekeyStore = KeyStore.getInstance("PKCS12")

FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx")

char[]nPassword = "suning".toCharArray()

StringkeyAlias = null

keyStore.load(fileInputStream,nPassword)

fileInputStream.close()

System.out.println("keystoretype=" + keyStore.getType())

Enumerationenumeration = keyStore.aliases()

if(enumeration.hasMoreElements())

{

keyAlias = (String) enumeration.nextElement()

System.out.println("alias=[" + keyAlias +"]")

}

System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias))

PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword)

//私钥转字裂备符串

StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim()

//公钥字符串通cer证书凳漏

Certificatecert = keyStore.getCertificate(keyAlias)

PublicKeypubkey = cert.getPublicKey()

StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim()

注意:

1. 所用类说明:

Base64:

import org.apache.commons.net.util.Base64

Certificate:

import java.security.cert.Certificate

2. openssl公私钥程用户输入密码本例密码suning

1. 摘要及

摘要程(digest全部实现述3程):

1. 根据key传map数据排序;

2. a1=b1&a2=b2&a3=b3形式字符串排除某些字符串Key值;

3. 调用digest进行md5编码;

三步均通Digest.digest()实现:

String digest = Digest.digest(Map map, String... keys)

传递http报文体body内容a1=b1&a2=b2&a3=b3形式字符串提取需要加签字符串并转map形式execludeKes要排除字段字符串数组

计算摘要步关键选取字段要求发送接收必须致即发送哪些字段计算摘要同接收必须相同字段计算摘要否则报6601错误

说明:a. Map存储计算摘要字段

b. keys表示排除字段能用于计算摘要字段signature,signAlgorithm

2. 公钥证书及字符串转换

转换目:便于存储(商户直接提供公钥证书于向验签系统提供公钥字符串商户需要用述代码公钥转字符串)

1. 公钥/私钥字符串转公钥/私钥主要字符串转公钥PublicKey

X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey))

KeyFactorykeyFactory = KeyFactory.getInstance(RSA)

PublicKeypubKey = keyFactory.generatePublic(pubKeySpec)

2. 公钥或私钥转Base64字符串:

StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim()

3. 公私钥验证

验证目:公私钥需要验证否匹配(前许商户公私钥混乱确定公私钥否匹配添加验签系统)代码由用户自用junit验证运行验证公私钥否确resulttrue则说明公私钥确;否则公私钥问题能使用

String prik1 =""

String pubb =""

String data ="wkk"

String digest =Digest.digest(data)

PrivateKey privateKey =RSAUtil.getPrivateKey(prik1)

String sign =RSAUtil.sign(digest, privateKey)

boolean result =RSAUtil.vertiy(digest, sign,

RSAUtil.getPublicKey(pubb))

System.out.println(result)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12314479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存