1、rsa算法详细解释我们这里不做详细解释,自行搜索,理解起来也不难。
2、rsa库的使用注意这里不是使用的
pycryto
,仅仅使用了
rsa
,安装也很简单
pip install rsa
。
2.1 生成pubkey和privkey import rsa
( pubkey, privkey) = rsa. newkeys( 512 )
( pubkey, privkey) = rsa. newkeys( 512 , poolsize= 8 )
不过数字越大生成的速度越慢,下面给出一个简单的对比
2.2 从文件中读取公钥或者私钥 with open ( 'private.pem' , mode= 'rb' ) as privatefile:
keydata = privatefile. read( )
privkey = rsa. PrivateKey. load_pkcs1( keydata)
2.3 加密数据 加密数据使用
pubkey
,解密数据使用
privkey
。
message = 'hello Bob!' . encode( 'utf8' )
crypto = rsa. encrypt( message, pubkey)
message = rsa. decrypt( crypto, privkey)
我们在2.1中生成的公钥和私钥可以用来加密的数据长度只有512bits,只有64个字节,其实还不到64个字节,还有11个字节被用作别用(具体的话会在下面给出链接,可以自行查看原文)。 那么问题来了,怎么加密大数据文件呢,来看下面的方法。
import rsa
from rsa. bigfile import *
( pub_key, priv_key) = rsa. newkeys( 512 )
with open ( 'inputfile' , 'rb' ) as infile, open ( 'outputfile' , 'wb' ) as outfile:
encrypt_bigfile( infile, outfile, pub_key)
with open ( 'inputfile' , 'rb' ) as infile, open ( 'outputfile' , 'wb' ) as outfile:
decrypt_bigfile( infile, outfile, priv_key)
2.4 数字签名 签名使用privkey,验证使用pubkey。刚好和加密相反。
对字符串的签名和验证
( pubkey, privkey) = rsa. newkeys( 512 )
message = 'Go left at the blue tree'
signature = rsa. sign( message, privkey, 'SHA-1' )
rsa. verify( message, signature, pubkey)
对文件的签名和验证
with open ( 'somefile' , 'rb' ) as msgfile:
signature = rsa. sign( msgfile, privkey, 'SHA-1' )
with open ( 'somefile' , 'rb' ) as msgfile:
rsa. verify( msgfile, signature, pubkey)
3、总结我们常说,非对称加密使用
pubkey
加密数据,
privkey
解密数据。 服务器公开
pubkey
,让我们来向服务器发送数据,那么如果服务器向我们发送数据怎么办呢?这个问题还没搞明白,有路过的大神还望不吝赐教。