/把RSA公钥格式PKCS#1转换成PKCS#8org.bouncycastle.asn1.pkcs.RSAPublicKey rsaPublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(
org.bouncycastle.util.encoders.Base64.decode(publicKeyString));
java.security.spec.RSAPublicKeySpec publicKeySpec = new java.security.spec.RSAPublicKeySpec(rsaPublicKey.getModulus(), rsaPublicKey.getPublicExponent());java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");java.security.PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
RSA公钥格式PKCS#1,PKCS#8互转说明(命令的方式)
PKCS#1 转 PKCS#8:openssl rsa -RSAPublicKey_in -in <filename> -pubout
PKCS#8 转 PKCS#1:
openssl rsa -pubin -in <filename> -RSAPublicKey_out
PKCS#1 格式密钥:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEArT82k67xybiJS9AD8nNAeuDYdrtCRaxkS6cgs8L9h83eqlDTlrdw
zBVSv5V4imTq/URbXn4K0V/KJ1TwDrqOI8hamGB0fvU13WW1NcJuv41RnJVua0QA
lS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+2kUWG94FccArNnBtBqqvFncXgQsm98JB
3a62NbS1ePP/hMI7Kkz+JNMyYsWkrOUFDCXAbSZkWBJekY4nGZtK1erqGRve8Jbx
TWirAm/s08rUrjOuZFA21/EI2nea3DidJMTVnXVPY2qcAjF+595shwUKyTjKB8v1
REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfqjwIDAQAB
-----END RSA PUBLIC KEY-----
PKCS#8 格式密钥:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArT82k67xybiJS9AD8nNA
euDYdrtCRaxkS6cgs8L9h83eqlDTlrdwzBVSv5V4imTq/URbXn4K0V/KJ1TwDrqO
I8hamGB0fvU13WW1NcJuv41RnJVua0QAlS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+
lkUWG94FccArNnBtBqqvFncXgQsm98JB3a42NbS1ePP/hMI7Kkz+JNMyYsWkrOUF
DCXAbSZkWBJekY4nGZtK1erqGRve8JbxTWirAm/s08rUrjOuZFA21/EI2nea3Did
JMTVnXVPY2qcAjF+595shwUKyTjKB8v1REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfq
jwIDAQAB
-----END PUBLIC KEY-----
#!/usr/bin/env python
# coding: utf8
#***************************************************************************************************
import argparse
import sys, glob, os
import xml.etree.ElementTree as xmltree
#***************************************************************************************************
class dsn(object):
class AccessDSNFileError(Exception):
pass
class InvalidDSNFileFormat(SyntaxError):
pass
def __init__(self, **kwargs):
if 'file' in kwargs:
self.dsn = None
self.pubkey = None
try:
xml = xmltree.parse (kwargs['file'])
if xml:
f_device = xml.getroot ()
if f_device.tag == 'f-device':
for child in f_device:
if child.tag == 'dsn':
self.dsn = child.text
elif child.tag == 'public-key':
self.pubkey = child.text
if self.dsn is None or self.pubkey is None:
raise SyntaxError
except SyntaxError:
raise dsn.InvalidDSNFileFormat
except:
raise dsn.AccessDSNFileError
elif 'dsn' in kwargs and 'pubkey' in kwargs:
self.dsn = kwargs['dsn']
self.pubkey = kwargs['pubkey']
#***************************************************************************************************
# main
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('dsn_file', help='DSN file')
args = parser.parse_args()
for file in glob.glob (args.dsn_file):
try:
info = dsn (file=file)
BEGIN = '-----BEGIN PUBLIC KEY-----'
END = '-----END PUBLIC KEY-----'
with os.popen ('openssl rsa -pubin -RSAPublicKey_in << END\n' + info.pubkey + '\nEND\n') as f:
pubkey = f.read ()
i1 = pubkey.find (BEGIN)
i2 = pubkey.find (END)
if i1 >= 0 and i2 > i1:
pubkey = pubkey[i1+len (BEGIN):i2]
pubkey = pubkey.replace ('\n', '')
print 'id dev_id {}'.format (info.dsn)
print 'file start 0'
s = pubkey
len = 80
while s:
print 'file add {}'.format (s[:len])
s = s[len:]
print 'conf save'
except:
import traceback
traceback.print_exc ()
#***************************************************************************************************
微信企业付款到银行卡(包含获取微信端的RSA公钥)参考文章:
/p/efb1dcce6e4a