Python:RSA秘钥生成与加密解密整理

目录

一、RSA相关的加密库

(1)安装方法

二、RSA公钥与私钥的生成与加载

(1)RSA key的生成

(2)RSA key的加载

三、RSA库的加密与解密

(1)RSA的加密与解密


一、RSA相关的加密库

整理相关的Python加密库共有两个:rsa、pycryptodome

rsa相关文档:

Welcome to Python-RSA’s documentation! — Python-RSA 4.8 documentation

pycryptodome相关文档:Welcome to PyCryptodome’s documentation — PyCryptodome 3.160b1 documentation

(1)安装方法

pip install rsa
pip install pycryptodome

二、RSA公钥与私钥的生成与加载

(1)RSA key的生成

rsa:

import rsa

# 1.生成rsa公钥和秘钥
public_key, private_key = rsa.newkeys(2048)
print(public_key)
print(private_key)

# PublicKey(19098161071657439892141520947697976412043884440571560061732797043401605428617379880876784157552100437663862108653364887957857407673613395651251207902962168142078417653556179438060072971988089113047601621314817182362262176930675993414870122716523157368732153235778784132276152363145462615252652157590422732266479304484410391479389078146358819372026943561301400918688492596276400922485831622528552743984111963383534507449159518660058705591838061812458696501224484080067698049147397436958820205096667315762969055175572690118457228853800096631713707974780668595272012107231537367860856268159500002494378393647771069872129, 65537)
# PrivateKey(19098161071657439892141520947697976412043884440571560061732797043401605428617379880876784157552100437663862108653364887957857407673613395651251207902962168142078417653556179438060072971988089113047601621314817182362262176930675993414870122716523157368732153235778784132276152363145462615252652157590422732266479304484410391479389078146358819372026943561301400918688492596276400922485831622528552743984111963383534507449159518660058705591838061812458696501224484080067698049147397436958820205096667315762969055175572690118457228853800096631713707974780668595272012107231537367860856268159500002494378393647771069872129, 65537, 8880439454013592677008723459422129990396651272441181642755165129630903517580695400916110295210990871375994230726194998178551759181007592948658457201807667607026530045233547647824017940222546464302800125241432150011559540103840887183190443866263739531176947948595795774096822666806457844227587355960072602117933430829740489281850127875638514134298553320591021164570006958107750491382137533473869043240158590449647759672384095143448067115332267691110670870462632813953769699781416383910698566904310022455917446208961734473176392911990700350475619648878952175791390114891028805699788242897031907409660070575325406384713, 2163460748679668507110555508604706434272557742170915229953589661165433609140831869822868132320866458342261906756311969795268936507135621929853768390155740087765012796756509948131264342314278249277263108268816461652649587763782125093410577510878488228924446920698513177659559076178471799369884220265853797495973872946065331467091, 8827597673455732953307664933048294570153802075123524767867719437424410541763584114662984289499238220781954510288647521362318053831051944888845440948276844951510106632675755938321643949274151289778512527106994998932836399341068302535983451752240116002062745710054286776087396422152638771419)

# 2.将生成的公钥和秘钥保存成PEM或者DER的格式
rsa_pem_public_key = public_key.save_pkcs1()
rsa_der_public_key = public_key.save_pkcs1("DER")
print(rsa_pem_public_key.decode("utf-8"))
print(rsa_der_public_key)

'''
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAjT2dsN/esJlZAtX5z+LpkoSU3Dunv2A9zKBgYgDNgGNdAjBMY1n6
qYtPQE+tsGM5kcXwq5XT0LxNWIKFCsxSxBUfaMZ2p8nvZV1VGQZroRHR0jr9o5LT
0jY20ywz3M7I6jwPJEMQo91F4HcuF+c9MyFh9gpJ2LyIAPt61fldcxxvr2XhLYYq
NXESC3/MRnkARNzKTOtv8/5ntXoXx9ly+xq7ijNPQoZYTKlvv0MbyXB7MzsrBNR+
DCNOHNPRXJ4fgC+D33zErUnWdTy+dB9yXwfvw5R5fzLjGfKKagpM0YOJgY4pYKDz
9tlvntcJ09627Atz+uMs/j7H5MxL7twvTwIDAQAB
-----END RSA PUBLIC KEY-----
'''

'''
-----BEGIN RSA PRIVATE KEY-----
MIIEqwIBAAKCAQEAwUCX9QInBGTtG8FpWLyOnsGoBerlUWRmD1x1Em65N5E1+IYs
htBCyIXizWQhrp8cdW0wwHQ+t8vwYJ5A+/F3L7RXt9xcKmTY73+YNnX+qE280TTp
hbZiLQ/tbgmVWgVY+4a6FxmZY+n7Zwrzzxm+7ydXU361f2AhYs/anDTcFkcg/0Cr
tq4HpFasxqgC2Jli94nNNFl2oKjgdMcg+/6QxRNgyyqWEe142L7kBAyqujOUwLGL
R/x5N/q4D/k5nTXTJ99kh1AjO5Y4k0hne6+5TWnsMrWJTUwOAZcVcjxCt4i4LC3o
KCxaLDoL7pxQ2Y36qzMxtW3RPzGloOXG4cJ1vQIDAQABAoIBAQCa1sRqPQVCEhOg
74EW5k1nika0JxcB9e2IVU5ALJMeoKybqfW3NtqrjArDAn2ySi4lMA2lxf4SicbZ
wzLSKxCSGm9GE7uNBCyFCLjOuhAGjfLBtSF+TzmuXVqhlfAiprI7JiGoLIyob2tN
jor23uwK9nyTm6yUmFKdhG5CZiGo5Ydz1lovQutaMGTOo2q0wJ3+SKfHWW/wF+NL
EtjhhTHxrt1rSLN+0kWZCRXUmEP5s1Y98H57rsZzSLGnPy6GeiKjPvB5Xr+TyYxz
QVhwi/MWskVUwwXBUqD/hGUP8/2Qpw4OVbn1YV4KTd01boCMqWUVy70PKr+OAO3b
ZMbW9+eBAoGJAPxbqvSQVr5cgBZXwogdnKGdOkUMZcyWjb2Nsltzipvar9HDzrbl
iohAoH+0jorWjEOqpmtQq62ogwTkS9ATKk5ci9JfZwwc35raSwoSIv3yFnT7SPgF
ViZcEMx6tJJ5MeNOBw34BB18L1FY+Rj99km3gvGCFxjcbE6tKZcyrRbdl8z6BH+Q
f7ECeQDECo+H0DeC7oFWASAXLOGs1iCyUHHcrlUUH3+HPDtKRLOB0pER6kVS6pG8
AcamhDpntil9wHsxz00qcgg/29HpcFfIFaRRdF5rtKfM5CxE5oB8YVFz41Bwcds2
jfzJBsxT8xFsh6TbKa50BLD1NPu3owTdj7iZxc0CgYkA5hgC0QjGPr2CgFy2X3t4
dBcyqQB71UW0qQ+Ifz/jMuX7h2xcj4DNhhw++xG7IjYrIAt5v8GHN0i9ZXlu8qJ2
4YoaZs9b2rx82OmOn/kXdKoF9dWkm5fqDAHHw1liSWc9qH5dikwIHIY9cpOIVFRC
+sXbG688tgtMqZPTpyuqjH2xSlDwRwuOkQJ4IAitvX6bo4x/m+MhMEhINCrlOt4E
TRA7nMcs2pdQBOnG/16+D9RdMZhc6gDMSidvN8U/cGoEd3YtYNMzX+P2oBOYdHx8
1kaSqzzg8o0SYsvbkPeCDNLHMSiZrodzGBJBTzJ31Wkw2hMsi468r8TRoQdFY0L5
4j69AoGJAPKC2PPlMZPNcER7nn3GOuB49feFvb4sAQluvxktpNy5WrKAOTKmQ1Z+
Wu5jJjnbf1/oUo3jjf9/JrA4SzwCo++3xsmpMzRPTMwfXdDDRxXjgRzykDOJh62F
+3meSBC/6GGcHshyQgO3eFTsSUaKakWLc2syysGf6m+BwMvccg3wYCs86MFjL4E=
-----END RSA PRIVATE KEY-----
'''


'''
b'0\x82\x01\n\x02\x82\x01\x01\x00\x8d=\x9d\xb0\xdf\xde\xb0\x99Y\x02\xd5\xf9\xcf\xe2\xe9\x92\x84\x94\xdc;\xa7\xbf`=\xcc\xa0`b\x00\xcd\x80c]\x020LcY\xfa\xa9\x8bO@O\xad\xb0c9\x91\xc5\xf0\xab\x95\xd3\xd0\xbcMX\x82\x85\n\xccR\xc4\x15\x1fh\xc6v\xa7\xc9\xefe]U\x19\x06k\xa1\x11\xd1\xd2:\xfd\xa3\x92\xd3\xd266\xd3,3\xdc\xce\xc8\xea<\x0f$C\x10\xa3\xddE\xe0w.\x17\xe7=3!a\xf6\nI\xd8\xbc\x88\x00\xfbz\xd5\xf9]s\x1co\xafe\xe1-\x86*5q\x12\x0b\x7f\xccFy\x00D\xdc\xcaL\xebo\xf3\xfeg\xb5z\x17\xc7\xd9r\xfb\x1a\xbb\x8a3OB\x86XL\xa9o\xbfC\x1b\xc9p{3;+\x04\xd4~\x0c#N\x1c\xd3\xd1\\\x9e\x1f\x80/\x83\xdf|\xc4\xadI\xd6u<\xbet\x1fr_\x07\xef\xc3\x94y\x7f2\xe3\x19\xf2\x8aj\nL\xd1\x83\x89\x81\x8e)`\xa0\xf3\xf6\xd9o\x9e\xd7\t\xd3\xde\xb6\xec\x0bs\xfa\xe3,\xfe>\xc7\xe4\xccK\xee\xdc/O\x02\x03\x01\x00\x01'
'''

'''
b'0\x82\x04\xab\x02\x01\x00\x02\x82\x01\x01\x00\xc1@\x97\xf5\x02\'\x04d\xed\x1b\xc1iX\xbc\x8e\x9e\xc1\xa8\x05\xea\xe5Qdf\x0f\\u\x12n\xb97\x915\xf8\x86,\x86\xd0B\xc8\x85\xe2\xcdd!\xae\x9f\x1cum0\xc0t>\xb7\xcb\xf0`\x9e@\xfb\xf1w/\xb4W\xb7\xdc\\*d\xd8\xef\x7f\x986u\xfe\xa8M\xbc\xd14\xe9\x85\xb6b-\x0f\xedn\t\x95Z\x05X\xfb\x86\xba\x17\x19\x99c\xe9\xfbg\n\xf3\xcf\x19\xbe\xef\'WS~\xb5\x7f`!b\xcf\xda\x9c4\xdc\x16G \xff@\xab\xb6\xae\x07\xa4V\xac\xc6\xa8\x02\xd8\x99b\xf7\x89\xcd4Yv\xa0\xa8\xe0t\xc7 \xfb\xfe\x90\xc5\x13`\xcb*\x96\x11\xedx\xd8\xbe\xe4\x04\x0c\xaa\xba3\x94\xc0\xb1\x8bG\xfcy7\xfa\xb8\x0f\xf99\x9d5\xd3\'\xdfd\x87P#;\x968\x93Hg{\xaf\xb9Mi\xec2\xb5\x89ML\x0e\x01\x97\x15r<B\xb7\x88\xb8,-\xe8(,Z,:\x0b\xee\x9cP\xd9\x8d\xfa\xab31\xb5m\xd1?1\xa5\xa0\xe5\xc6\xe1\xc2u\xbd\x02\x03\x01\x00\x01\x02\x82\x01\x01\x00\x9a\xd6\xc4j=\x05B\x12\x13\xa0\xef\x81\x16\xe6Mg\x8aF\xb4\'\x17\x01\xf5\xed\x88UN@,\x93\x1e\xa0\xac\x9b\xa9\xf5\xb76\xda\xab\x8c\n\xc3\x02}\xb2J.%0\r\xa5\xc5\xfe\x12\x89\xc6\xd9\xc32\xd2+\x10\x92\x1aoF\x13\xbb\x8d\x04,\x85\x08\xb8\xce\xba\x10\x06\x8d\xf2\xc1\xb5!~O9\xae]Z\xa1\x95\xf0"\xa6\xb2;&!\xa8,\x8c\xa8okM\x8e\x8a\xf6\xde\xec\n\xf6|\x93\x9b\xac\x94\x98R\x9d\x84nBf!\xa8\xe5\x87s\xd6Z/B\xebZ0d\xce\xa3j\xb4\xc0\x9d\xfeH\xa7\xc7Yo\xf0\x17\xe3K\x12\xd8\xe1\x851\xf1\xae\xddkH\xb3~\xd2E\x99\t\x15\xd4\x98C\xf9\xb3V=\xf0~{\xae\xc6sH\xb1\xa7?.\x86z"\xa3>\xf0y^\xbf\x93\xc9\x8csAXp\x8b\xf3\x16\xb2ET\xc3\x05\xc1R\xa0\xff\x84e\x0f\xf3\xfd\x90\xa7\x0e\x0eU\xb9\xf5a^\nM\xdd5n\x80\x8c\xa9e\x15\xcb\xbd\x0f*\xbf\x8e\x00\xed\xdbd\xc6\xd6\xf7\xe7\x81\x02\x81\x89\x00\xfc[\xaa\xf4\x90V\xbe\\\x80\x16W\xc2\x88\x1d\x9c\xa1\x9d:E\x0ce\xcc\x96\x8d\xbd\x8d\xb2[s\x8a\x9b\xda\xaf\xd1\xc3\xce\xb6\xe5\x8a\x88@\xa0\x7f\xb4\x8e\x8a\xd6\x8cC\xaa\xa6kP\xab\xad\xa8\x83\x04\xe4K\xd0\x13*N\\\x8b\xd2_g\x0c\x1c\xdf\x9a\xdaK\n\x12"\xfd\xf2\x16t\xfbH\xf8\x05V&\\\x10\xccz\xb4\x92y1\xe3N\x07\r\xf8\x04\x1d|/QX\xf9\x18\xfd\xf6I\xb7\x82\xf1\x82\x17\x18\xdclN\xad)\x972\xad\x16\xdd\x97\xcc\xfa\x04\x7f\x90\x7f\xb1\x02y\x00\xc4\n\x8f\x87\xd07\x82\xee\x81V\x01 \x17,\xe1\xac\xd6 \xb2Pq\xdc\xaeU\x14\x1f\x7f\x87<;JD\xb3\x81\xd2\x91\x11\xeaER\xea\x91\xbc\x01\xc6\xa6\x84:g\xb6)}\xc0{1\xcfM*r\x08?\xdb\xd1\xe9pW\xc8\x15\xa4Qt^k\xb4\xa7\xcc\xe4,D\xe6\x80|aQs\xe3Ppq\xdb6\x8d\xfc\xc9\x06\xccS\xf3\x11l\x87\xa4\xdb)\xaet\x04\xb0\xf54\xfb\xb7\xa3\x04\xdd\x8f\xb8\x99\xc5\xcd\x02\x81\x89\x00\xe6\x18\x02\xd1\x08\xc6>\xbd\x82\x80\\\xb6_{xt\x172\xa9\x00{\xd5E\xb4\xa9\x0f\x88\x7f?\xe32\xe5\xfb\x87l\\\x8f\x80\xcd\x86\x1c>\xfb\x11\xbb"6+ \x0by\xbf\xc1\x877H\xbdeyn\xf2\xa2v\xe1\x8a\x1af\xcf[\xda\xbc|\xd8\xe9\x8e\x9f\xf9\x17t\xaa\x05\xf5\xd5\xa4\x9b\x97\xea\x0c\x01\xc7\xc3YbIg=\xa8~]\x8aL\x08\x1c\x86=r\x93\x88TTB\xfa\xc5\xdb\x1b\xaf<\xb6\x0bL\xa9\x93\xd3\xa7+\xaa\x8c}\xb1JP\xf0G\x0b\x8e\x91\x02x \x08\xad\xbd~\x9b\xa3\x8c\x7f\x9b\xe3!0HH4*\xe5:\xde\x04M\x10;\x9c\xc7,\xda\x97P\x04\xe9\xc6\xff^\xbe\x0f\xd4]1\x98\\\xea\x00\xccJ\'o7\xc5?pj\x04wv-`\xd33_\xe3\xf6\xa0\x13\x98t||\xd6F\x92\xab<\xe0\xf2\x8d\x12b\xcb\xdb\x90\xf7\x82\x0c\xd2\xc71(\x99\xae\x87s\x18\x12AO2w\xd5i0\xda\x13,\x8b\x8e\xbc\xaf\xc4\xd1\xa1\x07EcB\xf9\xe2>\xbd\x02\x81\x89\x00\xf2\x82\xd8\xf3\xe51\x93\xcdpD{\x9e}\xc6:\xe0x\xf5\xf7\x85\xbd\xbe,\x01\tn\xbf\x19-\xa4\xdc\xb9Z\xb2\x8092\xa6CV~Z\xeec&9\xdb\x7f_\xe8R\x8d\xe3\x8d\xff\x7f&\xb08K<\x02\xa3\xef\xb7\xc6\xc9\xa934OL\xcc\x1f]\xd0\xc3G\x15\xe3\x81\x1c\xf2\x903\x89\x87\xad\x85\xfby\x9eH\x10\xbf\xe8a\x9c\x1e\xc8rB\x03\xb7xT\xecIF\x8ajE\x8bsk2\xca\xc1\x9f\xeao\x81\xc0\xcb\xdcr\r\xf0`+<\xe8\xc1c/\x81'
'''

pycryptodome:

from Crypto.PublicKey import RSA

# 1.生成rsa公钥和秘钥并且导出PEM格式的公钥和秘钥
rsa_key = RSA.generate(2048)
# rsa_key = RSA.construct((n,e,d,p,q))

print(rsa_key.public_key().exportKey().decode("utf-8"))
print(rsa_key.exportKey().decode("utf-8"))
'''
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkx8WbNvg5iE7VuTJzc5Z
tPt6/4sq2QK0ph6fTGsSe9DUb8jhswZJFeQ/Fcl9wVKKJD1EvgQrChj3IzPvS/R5
jOXnxqDXqy6bU4e9blmIDbdZxigYwNMHaWB6dEd0WF3G0x2zXdkIp/RjIAWZAAGz
yBBgvovaVTBZg0n1kdaYwfY+xV9Fx27p+xny0+H/XSREK88kRkBciNogJLjXIDCA
18LN/Pvko1DCtZJnNjz0/JjDqorjKVAZd3uMiDSI09QrhjHk0Xfq33lhn6OrzDj3
QhVXCu9gq6OVqrhG7B4gdnF9v2qGZB27Nu08Zz8XYHjbVcI4pdpiUXPKoYQRgBKY
7wIDAQAB
-----END PUBLIC KEY-----
'''

'''
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAkx8WbNvg5iE7VuTJzc5ZtPt6/4sq2QK0ph6fTGsSe9DUb8jh
swZJFeQ/Fcl9wVKKJD1EvgQrChj3IzPvS/R5jOXnxqDXqy6bU4e9blmIDbdZxigY
wNMHaWB6dEd0WF3G0x2zXdkIp/RjIAWZAAGzyBBgvovaVTBZg0n1kdaYwfY+xV9F
x27p+xny0+H/XSREK88kRkBciNogJLjXIDCA18LN/Pvko1DCtZJnNjz0/JjDqorj
KVAZd3uMiDSI09QrhjHk0Xfq33lhn6OrzDj3QhVXCu9gq6OVqrhG7B4gdnF9v2qG
ZB27Nu08Zz8XYHjbVcI4pdpiUXPKoYQRgBKY7wIDAQABAoIBADeTv195QsD83dNK
E5gtM0NE2yatNo8LUB4PJGN0cWOXtKDT9LsyDSr5cgFzgA+ndCsTgCP+JBoo6zd/
t47seHyLH18wRLjUnvXTqfKFXPm9gWrzm8JAFiUvPqMtmRyGtITtS+SQiA4Wqtme
c7mGaxmRYlKpN14GKVKI/n1M4aEnp8XS6K30rc8UPt8cf3y77Hqc7+igddg8jAMg
opWqeMR6tms9c39ZxD8gk4wSidBh1RDTkCuq732eBo5n0evylpe/5X3Tlig23m0x
v9jB12GaoaqW/zEbgvGLqDSt4suWItyPOhBRvHDJx+jQsJjpMYptMCe8pUeSVgY4
ovd/RzkCgYEAvD3LX2Khp3d9TknT9vPNrsQYtdX5sVCcobqIvXRxmTdG9Sc2qblz
H2mwHExEewgmdQSiopwx3Njlzc7DKYYJwkDvcE9IxLBpOmAYAxHwGSawLZvzgTAL
v6X4P7eQZ1rcsQEAsq9r5bUMG4poOW8F1WgVXnYYtQxO06T1jgZ477kCgYEAyBQk
U/30Fbzpf14MP4XbkWnT/SpDYtXmX8uc2NbZQ03z72XnvQm2DzLUy/brw6AK08Ml
9TroDU6PqcKYZfseryrgXVFvG/g9EfOkB9+27vpPrVUF2odZEeIVTVBwwUbgddYz
SSks0E5QsWiiTY4p9YcHo6hiJdX0NZNnjfa/EecCgYBAy8iYodvhSHlCnJkw9YVE
dk3HMcuMZKI17X6qME32Hpf3RTNEwwhEtN2hMAOWkhyixSCydq+XRLX93QFC5tev
HSkOcMwsoEjohjFdxSvvjGiymm78dixlIN1OGYLEgPtclmrGFyo93M85H7B2rKfG
aNiKNn6Uu5LauXqpE8NHSQKBgCozTWJF2zjGir1pmc3ALwqhtqvcQTBUi23DJYb6
8gJnK79f0BwoMzVLdGS85Qdy9zWpIJVz4kQEQPr+Z2SDLfqmYYJtTbEpj7/8kqly
f0QymaGmoEBycc/6zqFrCQ1LJMbV8iVJQQGCszRoLGuNQ75cx7i2KFVwpjyypZHk
7HIbAoGAeitsUqltYkc1yCVs+knBe+16W5sRtaZhgmJbysG1mhI0J8tODmWQfAq0
aI9lk33UsydGhZSFN0lidBUegKJLN6pbxo7cOgvmOxwlvPzQd43/o/YD8+Q+qQpI
1w3cVP2b/Hh1uh/DpUFB+JtJ1d+BDaO8P1uzYPhn7UmJ6d+k37U=
-----END RSA PRIVATE KEY-----
'''

(2)RSA key的加载

rsa:

rsa_pem_public_key = '''-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAjT2dsN/esJlZAtX5z+LpkoSU3Dunv2A9zKBgYgDNgGNdAjBMY1n6
qYtPQE+tsGM5kcXwq5XT0LxNWIKFCsxSxBUfaMZ2p8nvZV1VGQZroRHR0jr9o5LT
0jY20ywz3M7I6jwPJEMQo91F4HcuF+c9MyFh9gpJ2LyIAPt61fldcxxvr2XhLYYq
NXESC3/MRnkARNzKTOtv8/5ntXoXx9ly+xq7ijNPQoZYTKlvv0MbyXB7MzsrBNR+
DCNOHNPRXJ4fgC+D33zErUnWdTy+dB9yXwfvw5R5fzLjGfKKagpM0YOJgY4pYKDz
9tlvntcJ09627Atz+uMs/j7H5MxL7twvTwIDAQAB
-----END RSA PUBLIC KEY-----'''

rsa_pem_private_key = '''
-----BEGIN RSA PRIVATE KEY-----
MIIEqwIBAAKCAQEAwUCX9QInBGTtG8FpWLyOnsGoBerlUWRmD1x1Em65N5E1+IYs
htBCyIXizWQhrp8cdW0wwHQ+t8vwYJ5A+/F3L7RXt9xcKmTY73+YNnX+qE280TTp
hbZiLQ/tbgmVWgVY+4a6FxmZY+n7Zwrzzxm+7ydXU361f2AhYs/anDTcFkcg/0Cr
tq4HpFasxqgC2Jli94nNNFl2oKjgdMcg+/6QxRNgyyqWEe142L7kBAyqujOUwLGL
R/x5N/q4D/k5nTXTJ99kh1AjO5Y4k0hne6+5TWnsMrWJTUwOAZcVcjxCt4i4LC3o
KCxaLDoL7pxQ2Y36qzMxtW3RPzGloOXG4cJ1vQIDAQABAoIBAQCa1sRqPQVCEhOg
74EW5k1nika0JxcB9e2IVU5ALJMeoKybqfW3NtqrjArDAn2ySi4lMA2lxf4SicbZ
wzLSKxCSGm9GE7uNBCyFCLjOuhAGjfLBtSF+TzmuXVqhlfAiprI7JiGoLIyob2tN
jor23uwK9nyTm6yUmFKdhG5CZiGo5Ydz1lovQutaMGTOo2q0wJ3+SKfHWW/wF+NL
EtjhhTHxrt1rSLN+0kWZCRXUmEP5s1Y98H57rsZzSLGnPy6GeiKjPvB5Xr+TyYxz
QVhwi/MWskVUwwXBUqD/hGUP8/2Qpw4OVbn1YV4KTd01boCMqWUVy70PKr+OAO3b
ZMbW9+eBAoGJAPxbqvSQVr5cgBZXwogdnKGdOkUMZcyWjb2Nsltzipvar9HDzrbl
iohAoH+0jorWjEOqpmtQq62ogwTkS9ATKk5ci9JfZwwc35raSwoSIv3yFnT7SPgF
ViZcEMx6tJJ5MeNOBw34BB18L1FY+Rj99km3gvGCFxjcbE6tKZcyrRbdl8z6BH+Q
f7ECeQDECo+H0DeC7oFWASAXLOGs1iCyUHHcrlUUH3+HPDtKRLOB0pER6kVS6pG8
AcamhDpntil9wHsxz00qcgg/29HpcFfIFaRRdF5rtKfM5CxE5oB8YVFz41Bwcds2
jfzJBsxT8xFsh6TbKa50BLD1NPu3owTdj7iZxc0CgYkA5hgC0QjGPr2CgFy2X3t4
dBcyqQB71UW0qQ+Ifz/jMuX7h2xcj4DNhhw++xG7IjYrIAt5v8GHN0i9ZXlu8qJ2
4YoaZs9b2rx82OmOn/kXdKoF9dWkm5fqDAHHw1liSWc9qH5dikwIHIY9cpOIVFRC
+sXbG688tgtMqZPTpyuqjH2xSlDwRwuOkQJ4IAitvX6bo4x/m+MhMEhINCrlOt4E
TRA7nMcs2pdQBOnG/16+D9RdMZhc6gDMSidvN8U/cGoEd3YtYNMzX+P2oBOYdHx8
1kaSqzzg8o0SYsvbkPeCDNLHMSiZrodzGBJBTzJ31Wkw2hMsi468r8TRoQdFY0L5
4j69AoGJAPKC2PPlMZPNcER7nn3GOuB49feFvb4sAQluvxktpNy5WrKAOTKmQ1Z+
Wu5jJjnbf1/oUo3jjf9/JrA4SzwCo++3xsmpMzRPTMwfXdDDRxXjgRzykDOJh62F
+3meSBC/6GGcHshyQgO3eFTsSUaKakWLc2syysGf6m+BwMvccg3wYCs86MFjL4E=
-----END RSA PRIVATE KEY-----'''

public_key = rsa.PublicKey.load_pkcs1(rsa_pem_public_key.encode("utf-8"))
private_key = rsa.PrivateKey.load_pkcs1(rsa_pem_private_key.encode("utf-8"))
print(public_key)
print(private_key)

'''
PublicKey(17829984972447729021527877285193593735051882228040901581384436018669347572224617775276817324409666335884008124816757793347971493627920641303906176123024310323007025931252496942016711475798497586531248081753723090444274525198974674544068706764442919477299328439217146594506537330770536246479018519856561806841878663964199137669390423879205827672021757765528305049010595592188923326109284527843777348784693193014872032080508606017203081149290801858698846557412490167618828159417486912664666420540962131138570470351653626452975889937233327237276790308477876290414791160188649896415462600746751729971823750125791353777999, 65537)
'''

'''
PrivateKey(24395845141023207019886428965352401990553951732053258637082398179057258286793001898107421683012969898690514314973917366297528450492638229847307571651018054805943234907448519468859872390686272808447025629926697286540233009327889256451235754617347208569572416060318958246204285590705644193430982121714801067126834130563471938667745803252228501984483552301521772579720240756906875259273795993289918742164004714645600576014070780712075052731255445333858543585249040862766280294800091330396523618305293498930075259336173201724813402937872036387201838325932923206887822644688394530843026709661306080984108703923508959409597, 65537, 19546604640968134040530332254614258030181241214125098967502277009663192282824977183417317127348078938313302511242205180345197658351289095461832561566671621494119036040559100314476279036802663917658014798166697812170646128443588581354874185192439414712120597026524688305967423537359863536580698185258671305195277886992156218632565079580621476708768641449795639585106943462344681880183023251557280147166895267598774531141107700646585358930328963964484257165645796878338343746296752787160647669488120836900350748137039079033771243497839567967513740886783943634529307691640036633983236783132966489558048051186051120097153, 3268981983368171895774772730584067776052611603190787663668761033380092932610532884146489565148070083003628502369964996366536149039486331474331925345659950581047764039044568240581587068921252287736992548571784048476413481103664853058619081416846081571483098759574372537172709822586076894386788771174808441580228710479721816686513, 
7462826428883258872866783371981846897295880917243123538127455947888620961877936663736176214828681245450903652649973683673381681703832934207926246235908412072074084107095904692125176048978923363656405217123616863196400269135939472302291679710143176708392022352709316681240588938355181995469)
'''

 pycryptodome:

rsa_pem_public_key = '''-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAjT2dsN/esJlZAtX5z+LpkoSU3Dunv2A9zKBgYgDNgGNdAjBMY1n6
qYtPQE+tsGM5kcXwq5XT0LxNWIKFCsxSxBUfaMZ2p8nvZV1VGQZroRHR0jr9o5LT
0jY20ywz3M7I6jwPJEMQo91F4HcuF+c9MyFh9gpJ2LyIAPt61fldcxxvr2XhLYYq
NXESC3/MRnkARNzKTOtv8/5ntXoXx9ly+xq7ijNPQoZYTKlvv0MbyXB7MzsrBNR+
DCNOHNPRXJ4fgC+D33zErUnWdTy+dB9yXwfvw5R5fzLjGfKKagpM0YOJgY4pYKDz
9tlvntcJ09627Atz+uMs/j7H5MxL7twvTwIDAQAB
-----END RSA PUBLIC KEY-----'''

rsa_key = RSA.import_key(rsa_pem_public_key)

三、RSA库的加密与解密

(1)RSA的加密与解密

rsa:

data = "rsa test"
# rsa encrypt test
encrypt_data = rsa.encrypt(data.encode("utf-8"), public_key)
print(encrypt_data)
print(base64.b64encode(encrypt_data).decode("utf-8"))

'''
b'\x8a\x15\xccy\xfd\xe3\x90\xa9\x1c\xa5\xd7\xf4w\\F\x87\xdcJ,*\x1cp\xf6\x9b\xb0?R\xe8\x8a\xeb\xdc\xa1n\x1f\x87F\xd3z\xeb\x87\x82x\xf04x\xcd\xed\x83\xde \r\x19\x83\xb3X\xcd\xf9\x11\xf1\xfc\x0f,\xd6\x9c\x9a\x90\x902E|![\xc5\xbfM\\\x84\xfa\xf7J\xb9U\'\x16k\x02\x98;`\xfd\xd2Z\x03\xba\xef\xbe5\x89"\xa8gy{\x177\xd1\xc7\x97\x9d\xda\x07Y\rR\xf7\x85=a\xb9&\x1d\xa1-tYU8\xb4\xeb\xdc\'\x8c\x10\xb9<?\xec\\3\xcb\x9a\xa6\xff\xd5\xe9\x94\xc3\x17a\x03lqB\xca\x8e\xd1P\xf4\xde(\x160\xbc\x18\x16,\xfeLCF\xc6a\\s;\xdb\x01\xcaK 6\x8a\x03i\x1d>\xdd\xab\xf0\x96\xbf\xe8\xe2\x96QZ]\xee\xdco\xce\xe3L\x98\xbd\xda\x15Rnk\xb3\xfe\xba\xb3\xe1\xaa\xebo\xffC\x7fp.\x07o`_;2\x88\x085\x9f\xd0\x86\x16\xa8\xc7N\xe7t\xf8%\x9b\xd7\n.V\xb5\x8c\x86u\x08u\x9b\x7f'
'''

'''
ihXMef3jkKkcpdf0d1xGh9xKLCoccPabsD9S6Irr3KFuH4dG03rrh4J48DR4ze2D3iANGYOzWM35EfH8DyzWnJqQkDJFfCFbxb9NXIT690q5VScWawKYO2D90loDuu++NYkiqGd5exc30ceXndoHWQ1S94U9YbkmHaEtdFlVOLTr3CeMELk8P+xcM8uapv/V6ZTDF2EDbHFCyo7RUPTeKBYwvBgWLP5MQ0bGYVxzO9sByksgNooDaR0+3avwlr/o4pZRWl3u3G/O40yYvdoVUm5rs/66s+Gq62//Q39wLgdvYF87MogINZ/Qhhaox07ndPglm9cKLla1jIZ1CHWbfw==
'''

# rsa decrypt test
decrypt_data = rsa.decrypt(encrypt_data, private_key)
print(decrypt_data.decode("utf-8"))
# rsa test

 pycryptodome:

data = "rsa test"
# RSA encrypt 
cipher = new(rsa_key)
encrypt_data = cipher.encrypt(bytes(data, "utf-8"))
encrypt_base64_encode_data = base64.b64encode(encrypt_data)
print(encrypt_data)
print(encrypt_base64_encode_data)

'''
b'5\xa4k1"D\xe9\xba\x10\xe6r\xef#y\xcew\x9e\x81$K\x93\xec\x87\x9d\x84\xd1\xf5\xd5\xa2\xaf\x15\xf2?\xdd\xae\xd4\xc8\x88\xaa\x91\x02-Z\xd6u\x80\x16\xc2\xa2B\xf2N\x90\x01\xef*\xbf\x9a~\xa0\xe1\x8f\x98Sj~\xd3}\xd5~s\\\xd0\xe8\xe2\xe9\'c@\xf9\xe5\x16\xb1\x059\x10~\xe7\x00c\x19\xfd^6\xd8\xa5\x15\xbd\xc7\xbc\xae{\x05q\x94\xb9%\xbcm\x1a\x93>\x18j\xcb\xf1\x08\xaa\x87\x93\xc2\xc0\xef\xfc\x8f\xe3\xe0u\x1f\xc0\xdd\xfd\x8e\x8a\xac\x0e\xf8\xca4\xc7\xe2\'\xcb\xf6\xf5Z\x04\x9e\x17\xa34\x16\xbf/\xcere\x84\xcau\x1d\xbf\xf7+\xff\xa4\x92\xdc\xe80\x8a\xc7\xeb\xa9\x9c7\xd7\xfbN\xb4H|\xfb\xf5\xeb}\xad\n\xa2\x9c\x98\x9ft\x17-\x1dS-\n*,\x94&j\x88\x1d\x8dG\x8a\xb6qs\xb7\xf7\xfe\x9c\xbe\xf3\x8f0\xd5\x06\x08\x02\xc8\xd5\xee22\xb6\xe9\xa1\xebR\x1cp\x9a\xd6Y\xfb\x0eyv|\x85A~\x16\xd9]\xa0~\xfb\xfb\xd0E'
'''


'''
b'NaRrMSJE6boQ5nLvI3nOd56BJEuT7IedhNH11aKvFfI/3a7UyIiqkQItWtZ1gBbCokLyTpAB7yq/mn6g4Y+YU2p+033VfnNc0Oji6SdjQPnlFrEFORB+5wBjGf1eNtilFb3HvK57BXGUuSW8bRqTPhhqy/EIqoeTwsDv/I/j4HUfwN39joqsDvjKNMfiJ8v29VoEnhejNBa/L85yZYTKdR2/9yv/pJLc6DCKx+upnDfX+060SHz79et9rQqinJifdBctHVMtCioslCZqiB2NR4q2cXO39/6cvvOPMNUGCALI1e4yMrbpoetSHHCa1ln7Dnl2fIVBfhbZXaB++/vQRQ=='
'''

# RSA decrypt
encrypt_base64_decode_data = base64.b64decode(encrypt_base64_encode_data)
decrypt_data = cipher.decrypt(encrypt_base64_decode_data, "Error")
print(encrypt_base64_decode_data)
print(decrypt_data.decode("utf-8"))

'''
b'5\xa4k1"D\xe9\xba\x10\xe6r\xef#y\xcew\x9e\x81$K\x93\xec\x87\x9d\x84\xd1\xf5\xd5\xa2\xaf\x15\xf2?\xdd\xae\xd4\xc8\x88\xaa\x91\x02-Z\xd6u\x80\x16\xc2\xa2B\xf2N\x90\x01\xef*\xbf\x9a~\xa0\xe1\x8f\x98Sj~\xd3}\xd5~s\\\xd0\xe8\xe2\xe9\'c@\xf9\xe5\x16\xb1\x059\x10~\xe7\x00c\x19\xfd^6\xd8\xa5\x15\xbd\xc7\xbc\xae{\x05q\x94\xb9%\xbcm\x1a\x93>\x18j\xcb\xf1\x08\xaa\x87\x93\xc2\xc0\xef\xfc\x8f\xe3\xe0u\x1f\xc0\xdd\xfd\x8e\x8a\xac\x0e\xf8\xca4\xc7\xe2\'\xcb\xf6\xf5Z\x04\x9e\x17\xa34\x16\xbf/\xcere\x84\xcau\x1d\xbf\xf7+\xff\xa4\x92\xdc\xe80\x8a\xc7\xeb\xa9\x9c7\xd7\xfbN\xb4H|\xfb\xf5\xeb}\xad\n\xa2\x9c\x98\x9ft\x17-\x1dS-\n*,\x94&j\x88\x1d\x8dG\x8a\xb6qs\xb7\xf7\xfe\x9c\xbe\xf3\x8f0\xd5\x06\x08\x02\xc8\xd5\xee22\xb6\xe9\xa1\xebR\x1cp\x9a\xd6Y\xfb\x0eyv|\x85A~\x16\xd9]\xa0~\xfb\xfb\xd0E'
'''

'''
rsa test
'''
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值