如何查看rsa 私钥有效期 支付宝密钥证书怎么获取?

[更新]
·
·
分类:互联网
4635 阅读

如何查看rsa 私钥有效期

支付宝密钥证书怎么获取?

支付宝密钥证书怎么获取?

1. 填写渠道费率、支付宝版本
登陆Ping 管理平台,点击【应用设置】— 【支付渠道】,进入参数填写页面
支付宝版本选择openapi
2. 获取 APPID
打开支付宝开放平台,点击右上角账号,打开【密钥管理】页面,并填写该应用的 APPID
若此处存在多个应用,请务必确认填写产品签约生效所在的应用的 APPID
3. 填写合作伙伴身份(PID)
4. 加密方式
选择 RSA(SHA256)
5. 配置支付宝公钥(出错率高,请仔细查看)
① 到开放平台页面,设置支付宝接口加签方式
② 选择 “公钥” 加密模式,下载并打开支付宝验签工具,生成密钥
若使用资金支付类接口,如转账到支付宝账户,请选择公钥证书加密(公钥证书配置指南)
③ 复制商户应用公钥,黏贴到公钥字符框里,保存设置
④ 刷新页面,点击「查看」,复制「支付宝公钥」(支付宝公钥格式需要修改为 64 位一行,点击下载换行工具),填写至Ping 「支付宝公钥」中
⑤ 复制支付宝验签工具生成的商户应用私钥(带上开头的 BEGIN 与结尾的 END),填写至Ping 「应用私钥」中
注:如果「设置接口加签方式」中已有数据,请与贵司开发同事核实,不要随意覆盖,以免影响使用中的支付渠道。
6. 填写完毕,点击保存

openssl使用详解?

1. 首先需要使用 openssl 生成一个 2048 位的密钥 文件 ( 密钥文件中包含了私钥和公钥)
2. 然后从 密钥文件中提取出公钥
3. 使用 公钥加密一个文件 ( 为原始文件, 为加密之后的文件)
4. 使用 私钥解密一个文件 ( 为加密的文件, 为解密之后的文件)
5.上面的加密对大文件就不适用了,可以考虑使用
解密使用
其中,可以使用命令生成

Python如何玩转加密?

一、生成公钥、私钥对
使用openssl工具生成RSA公钥、私钥对。
1.下载openssl工具。下载地址
2.打开 openssl 文件夹下的 bin 文件夹,执行 openssl.exe 文件;
3.生成RSA私钥命令:
这里生成的密钥文件是2048比特。
genrsa -out rsa_private_ 2048
4.生成RSA公钥命令:
注意,公钥和私钥是成对的,所以你在生成一个后,另一个的生成是基于前一个的文件名,否则生成的不是一对哦!!
rsa -in rsa_private_ -pubout -out rsa_public_
生成后的文件应该在你的用户目录下,或者在openssl的bin文件夹下(有时候在有时又不在,真是搞不懂,反正你就在这两个地方都找一下,肯定在的)。
5.这里介绍一下RSA密钥文件的规律,文件名都是以.pem为后缀,生成的RSA密钥,可以看到都是
以-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATE KEY-----结尾的没有换行的字符串,这个就是原始的 RSA 私钥。
二、安装python支持的加密库—pycryptodome
我用的python3.6版本,网上搜了一下,在python3.6之前的版本大部分是用pycrypto来进行加密的,而在python3.6之后,因无人维护pycrypto,所以改名为pycryptodome,这个库的强大之处在于,他是pycrypto库的扩展,用起来更加方便,更灵活啊~~功能杠杠滴
1.安装pycryptodome
如果你安装了pip,那么就很简单了。
pip3 install pycryptodome
2.将密钥文件导入到程序中。
from import RSA
# 读取标准的rsa公私钥pem文件
def load_rsa_file(fn):
key None
try:
key (open(fn).read())
except Exception as err:
print(导入rsa的KEY文件出错, fn, err)
return key
# 标准字符串密钥转rsa格式密钥
def rsa_key_str2std(skey):
ret None
try:
ret (skey)
except Exception as err:
print(字符串密钥转rsa格式密钥错误, skey, err)
return ret
加密
from import PKCS1_OAEP
# RSA_加密
def rsa_enc(data, rsa_key):
ciphertext b
try:
cipher PKCS1_(rsa_key)
ciphertext cipher.encrypt(data)
except Exception as err:
print(RSA加密失败, , err)
return ciphertext
由于RSA在加密过程中,每次加密只能加密最大长度的字符串,如果你的加密数据超长,在加密过程中需要分段加密,同理,解密也是分段解密的。
1024位的证书,加密时最大支持117个字节,解密时为128;
2048位的证书,加密时最大支持245个字节,解密时为256。
加密时支持的最大字节数:证书位数/8 -11(比如:2048位的证书,支持的最大加密字节数:2048/8 - 11 245)
其中,11位字节为保留字节。
上面我的密钥文件是2048比特,所以加密分块长度为245字节。
4.加密分块
# 根据key长度计算分块大小
def get_block_size(rsa_key):
try:
# RSA仅支持限定长度内的数据的加解密,需要分块
# 分块大小block_reversed_size11
reserve_size block_reversed_size
key_size rsa__in_bits()
if (key_size % 8) ! 0:
raise RuntimeError(RSA 密钥长度非法)
# 密钥用来解密,解密不需要预留长度
if rsa_key.has_private():
reserve_size 0
bs int(key_size / 8) - reserve_size
except Exception as err:
print(计算加解密数据块大小出错, rsa_key, err)
return bs
# 返回块数据
def block_data(data, rsa_key):
bs get_block_size(rsa_key)
for i in range(0, len(data), bs):
yield data[i:i bs]
RSA在解密分段时与加密时用的分段大小无关,都是按照密钥长度/8来分段解密的。
解密
from import PKCS1_OAEP
# RSA解密
def rsa_dec(data, rsa_key):
ret_data b
try:
cipher PKCS1_(rsa_key)
ret_data (data)
except Exception as err:
print(RSA解密失败, , err)
return ret_data
签名
from import pkcs1_15
from Crypto.Hash import SHA256
# RSA签名
def rsa_sign(data, rsa_key):
signature
try:
h (data)
signature pkcs1_(rsa_key).sign(h)
except Exception as err:
print(RSA签名失败, , err)
return signature
验签名
# RSA签名验证
def rsa_sign_verify(data, sig, rsa_key):
try:
h (data)
pkcs1_(rsa_key).verify(h, sig)
ret True
except (ValueError, TypeError):
ret False
return ret
加解密类(我将RSA加解密封装成一个类,方便后续直接调用),完整代码如下:
# -*- coding: utf-8 -*-
import as Cipher
import as Sign
import Crypto.Hash as Hash
from import RSA
from import PKCS1_v1_5 as PKCS1_v1_5_cipper
from import PKCS1_v1_5 as PKCS1_v1_5_sign
from Crypto.Hash import SHA1
class Rsa:
RSA加解密签名类
def __int__(self, ciper_libPKCS1_v1_5_cipper, sign_libPKCS1_v1_5_sign, hash_libSHA1,
pub_fileNone, pri_fileNone, pub_skeyNone, pri_skeyNone, pub_keyNone, pri_keyNone,
reversed_size11):
# 加解密库
_lib ciper_lib
_lib sign_lib
self.hash_lib hash_lib
# 公钥密钥
if pub_key:
_key pub_key
elif pub_skey:
_key (pub_skey)
elif pub_file:
_key (open(pub_file).read())
if pri_key:
_key pri_key
elif pri_skey:
_key (pri_skey)
elif pri_file:
_key (open(pri_file).read())
# 分块保留长度
_reversed_size reversed_size
# 根据key长度计算分块大小
def get_block_size(self, rsa_key):
try:
# RSA仅支持限定长度内的数据的加解密,需要分块
# 分块大小
reserve_size _reversed_size
key_size rsa__in_bits()
if (key_size % 8) ! 0:
raise RuntimeError(RSA 密钥长度非法)
# 密钥用来解密,解密不需要预留长度
if rsa_key.has_private():
reserve_size 0
bs int(key_size / 8) - reserve_size
except Exception as err:
print(计算加解密数据块大小出错, rsa_key, err)
return bs
# 返回块数据
def block_data(self, data, rsa_key):
bs _block_size(rsa_key)
for i in range(0, len(data), bs):
yield data[i:i bs]
# 加密
def enc_bytes(self, data, keyNone):
text b
try:
rsa_key _key
if key:
rsa_key key
cipher _(rsa_key)
for dat in _data(data, rsa_key):
cur_text cipher.encrypt(dat)
text cur_text
except Exception as err:
print(RSA加密失败, data, err)
return text
# 解密
def dec_bytes(self, data, keyNone):
text b
try:
rsa_key _key
if key:
rsa_key key
cipher _(rsa_key)
for dat in _data(data, rsa_key):
if type(_lib) _OAEP:
cur_text (dat)
else:
cur_text (dat, 解密异常)
text cur_text
except Exception as err:
print(RSA解密失败, data, err)
return text
# RSA签名
def sign_bytes(self, data, keyNone):
signature
try:
rsa_key _key
if key:
rsa_key key
h self.hash_(data)
signature _(rsa_key).sign(h)
except Exception as err:
print(RSA签名失败, , err)
return signature
# RSA签名验证
def sign_verify(self, data, sig, keyNone):
try:
rsa_key _key
if key:
rsa_key key
h self.hash_(data)
_(rsa_key).verify(h, sig)
ret True
except (ValueError, TypeError):
ret False
return ret
def main():
pass
if __name__ __main__:
main()