python对明文进行RSA加密

rsa加密是什么?

rsa加密是一种非对称的加密算法,就是加密秘钥和解密秘钥是不同的。用公钥进行加密,私钥进行解密。

加密:公钥 (e,n) 计算 

解密:私钥(d,n)计算

python怎么进行加密?

从上面的图中可以知道,A对明文进行加密,需使用到B发送给A的公钥,那就先要获取到公钥。(公钥(e,n):e (Exponent)--指数;n(Modulus)—模数)

① 抓包看第一个请求的响应结果:有看到2个参数Exponent、Modulus。

但是这两个值都是字符串,我们需要的是两个整数。故要对它先进行转换。

 

② 字符串转换成十进制 

import base64
import binascii
e_str=base64.b64decode('AQAB') #返回解码后的二进制数据(文本字符串转换成二进制数据)
m_str=base64.b64decode('AJONEgY58nD12OcAXv7P9UGPPsZOGLKj/IQjPf+gzyujHmXZoe3lFN1/PgxaqttzAAlC6DXgumvnyfjXc8csfkJz2oyaQiPMS2+TGipdZ1M3Rm1NlNO2K9yq8VeLFgZUhNCJTkS8RNoQ9pWT7EsAPGYINqmNh329Ltp/7JK7kyyl')
print(m_str)
print(e_str)
m_hex = binascii.b2a_hex(m_str) #返回二进制数据的十六进制表示(二进制转换成十六进制)
e_hex = binascii.b2a_hex(e_str)
print(m_hex)
print(e_hex)
e=int(e_hex,16) # 将16进制大端格式字符串转换为大整数(十六进制转换成十进制)
n=int(m_hex,16)
print(e)
print(n)

 知识点

1)Base64是一种用64个字符来表示任意二进制数据的方法。是一种最常见的二进制编码方法

方法

说明

 

base64.b64encode(data)

编码:二进制转换成文本字符串

 

base64.b64decode(string)

解码:文本字符串转换成二进制

 

2) binascii模块包含很多用来方法来转换二进制和各种ASCII编码的二进制表示法。binascii二进制和ASCII转换

方法

说明

 

binascii.a2b_base64(string)

转换的base64数据块为二进制,并返回二进制数据。一次可以传递多行。

和base64.b64decode对应。

binascii.b2a_base64(data)

转换二进制数据为一行base64编码的ASCII字符。返回字符串包含换行符。根据base64的标准data的长度最大为57。

和base64.b64encode对应。

binascii.b2a_hex(data)和binascii.hexlify(data)

返回二进制数据的十六进制表示。每个字节被转换成相应的2位十六进制表示形式。因此,得到的字符串是是原数据长度的两倍。

 

binascii.a2b_hex(hexstr)和binascii.unhexlify(hexstr)

从十六进制字符串hexstr返回二进制数据。是b2a_hex的逆向操作。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则报TypeError。

 

3)int转换成整数 int(x, base=10)

  • x -- 字符串或数字。

  • base -- 进制数,默认十进制。

int(x)–不传入base,x必须是数字int(x,base=16)–x是字符串形式,是16进制表达式(16进制转换成2进制)

③ 获取到模数和指数后,生成公钥进行加密 

根据 模数和指数,生成公钥

from cryptography.hazmat.primitives.asymmetric import rsa,padding
from cryptography.hazmat.backends import default_backend
pubkey=rsa.RSAPublicNumbers(e,n).public_key(default_backend())
print(pubkey)
key = pubkey.encrypt('abc12345'.encode('utf-8'),padding.PKCS1v15()) #使用公钥对明文“abc12345”加密,返回加密后的二进制数据
print(key)
print(binascii.b2a_base64(key)) #加密后的二进制转换成 字符串

posted @ 2021-03-12 16:14  溪棱  阅读(831)  评论(0编辑  收藏  举报