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)) #加密后的二進制轉換成 字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM