python3
#coding:utf-8
import base64
import rsa
def _str2key(s):
# 对字符串解码
b_str = base64.b64decode(s)
if len(b_str) < 162:
return False
hex_str = ''
# 按位转换成16进制
for x in b_str:
h = hex(x)[2:]
h = h.rjust(2, '0')
hex_str += h
# 找到模数和指数的开头结束位置
m_start = 29 * 2
e_start = 159 * 2
m_len = 128 * 2
e_len = 3 * 2
modulus = hex_str[m_start:m_start + m_len]
exponent = hex_str[e_start:e_start + e_len]
return modulus, exponent
def rsa_encrypt(s, pubkey_str):
'''
rsa加密
:param s:
:param pubkey_str:公钥
:return:
'''
key = _str2key(pubkey_str)
modulus = int(key[0], 16)
exponent = int(key[1], 16)
pubkey = rsa.PublicKey(modulus, exponent)
return base64.b64encode(rsa.encrypt(s.encode(), pubkey)).decode()
def main():
pubkey_str='''-----BEGIN PUBLIC KEY-----' + '\r' +
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqeG/yKkDJffoEgM0UUhDAObsb' + '\r' +
'wpzejBzm/XDCKdbfcjtknSKseomkQWtHdn686l8n/xb82cWHWMvYjHHnWuqcOMPC' + '\r' +
'v8JHZHfybKakEDNVbR2Ms8OhPZJGzS/V8G4H+QXRWGkNqJcTHR/w8yxGIxiz4YRQ' + '\r' +
'BhyFxRnWU0ZwpsigFQIDAQAB' + '\r' +
'-----END PUBLIC KEY-----'''
print (rsa_encrypt('123',pubkey_str))
if __name__ == '__main__':
main()