欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python實現(xiàn)RSA加密解密方法實例

 更新時間:2022年04月08日 12:39:56   作者:淺若清風cyf  
過去幾天我一直在嘗試用Python實現(xiàn)RSA算法,下面這篇文章主要給大家介紹了關(guān)于利用Python實現(xiàn)RSA加密解密的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

  • 加密技術(shù)在數(shù)據(jù)安全存儲,數(shù)據(jù)傳輸中發(fā)揮著重要作用,能夠保護用戶隱私數(shù)據(jù)安全,防止信息竊取。RSA是一種非對稱加密技術(shù),在軟件、網(wǎng)頁中已得到廣泛應用。本文將介紹RSA加密解密在python中的實現(xiàn)。
  • 原則:公鑰加密,私鑰解密
  • 解釋:具體過程的解釋請見代碼前的注釋

RSA加密實驗基本流程:

一、選取兩個大素數(shù)p、q,并計算得到n、phi_n

二、選取常用的e = 0x10001,方便將冪運算優(yōu)化為左移,加快運算速度

三、計算d,使用了擴展歐幾里得算法

四、輸入明文a,將明文轉(zhuǎn)化為可以用于計算的數(shù)字形式

五、對a使用快速冪取模,得到密文b,以16進制顯示

RSA解密流程:

六、對b使用快速冪取模,得到明文a,以字符形式顯示

一、安裝模塊

pip install pycryptodome 

二、生成密鑰對

  • 密鑰對文件生成和讀取
  • 代碼:
from Crypto.PublicKey import RSA
def create_rsa_pair(is_save=False):
    '''
    創(chuàng)建rsa公鑰私鑰對
    :param is_save: default:False
    :return: public_key, private_key
    '''
    f = RSA.generate(2048)
    private_key = f.exportKey("PEM")  # 生成私鑰
    public_key = f.publickey().exportKey()  # 生成公鑰
    if is_save:
        with open("crypto_private_key.pem", "wb") as f:
            f.write(private_key)
        with open("crypto_public_key.pem", "wb") as f:
            f.write(public_key)
    return public_key, private_key

def read_public_key(file_path="crypto_public_key.pem") -> bytes:
    with open(file_path, "rb") as x:
        b = x.read()
        return b

def read_private_key(file_path="crypto_private_key.pem") -> bytes:
    with open(file_path, "rb") as x:
        b = x.read()
        return b

三、加密

  • 流程:輸入文本(str)→字符串編碼(默認utf-8)(bytes)→rsa加密(bytes)→base64編碼(bytes)→解碼為字符串(str)
  • 代碼:
import base64
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA

def encryption(text: str, public_key: bytes):
	# 字符串指定編碼(轉(zhuǎn)為bytes)
	text = text.encode('utf-8')
	# 構(gòu)建公鑰對象
	cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))
	# 加密(bytes)
	text_encrypted = cipher_public.encrypt(text) 
	# base64編碼,并轉(zhuǎn)為字符串
	text_encrypted_base64 = base64.b64encode(text_encrypted ).decode()
	return text_encrypted_base64 
	
if __name__ == '__main__':
	public_key = read_public_key()
	text = '123456'
	text_encrypted_base64 = encryption(text, public_key)
	print('密文:',text_encrypted_base64)

四、解密

  • 說明:解密流程與加密流程相反(按照加密流程逆序解密)
  • 流程:輸入文本(str)→字符串編碼(默認utf-8)(bytes)→base64解碼(bytes)→rsa解密(bytes)→解碼為字符串(str)
  • 代碼:
import base64
from Crypto.Cipher import PKCS1_v1_5
from Crypto import Random
from Crypto.PublicKey import RSA

def decryption(text_encrypted_base64: str, private_key: bytes):
	# 字符串指定編碼(轉(zhuǎn)為bytes)
	text_encrypted_base64 = text_encrypted_base64.encode('utf-8')
	# base64解碼
	text_encrypted = base64.b64decode(text_encrypted_base64 )
	# 構(gòu)建私鑰對象
	cipher_private = PKCS1_v1_5.new(RSA.importKey(private_key))
	# 解密(bytes)
	text_decrypted = cipher_private.decrypt(text_encrypted , Random.new().read)
	# 解碼為字符串
	text_decrypted = text_decrypted.decode()
	return text_decrypted 
	
if __name__ == '__main__':
	# 生成密文
	public_key = read_public_key()
	text = '123456'
	text_encrypted_base64 = encryption(text, public_key)
	print('密文:',text_encrypted_base64)
	
	# 解密
	private_key = read_private_key()
	text_decrypted = decryption(text_encrypted_base64, private_key)
	print('明文:',text_decrypted)

五、完整代碼

import base64
from Crypto.Cipher import PKCS1_v1_5
from Crypto import Random
from Crypto.PublicKey import RSA
# ------------------------生成密鑰對------------------------
def create_rsa_pair(is_save=False):
    '''
    創(chuàng)建rsa公鑰私鑰對
    :param is_save: default:False
    :return: public_key, private_key
    '''
    f = RSA.generate(2048)
    private_key = f.exportKey("PEM")  # 生成私鑰
    public_key = f.publickey().exportKey()  # 生成公鑰
    if is_save:
        with open("crypto_private_key.pem", "wb") as f:
            f.write(private_key)
        with open("crypto_public_key.pem", "wb") as f:
            f.write(public_key)
    return public_key, private_key

def read_public_key(file_path="crypto_public_key.pem") -> bytes:
    with open(file_path, "rb") as x:
        b = x.read()
        return b

def read_private_key(file_path="crypto_private_key.pem") -> bytes:
    with open(file_path, "rb") as x:
        b = x.read()
        return b
# ------------------------加密------------------------
def encryption(text: str, public_key: bytes):
    # 字符串指定編碼(轉(zhuǎn)為bytes)
    text = text.encode('utf-8')
    # 構(gòu)建公鑰對象
    cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))
    # 加密(bytes)
    text_encrypted = cipher_public.encrypt(text)
    # base64編碼,并轉(zhuǎn)為字符串
    text_encrypted_base64 = base64.b64encode(text_encrypted).decode()
    return text_encrypted_base64

# ------------------------解密------------------------
def decryption(text_encrypted_base64: str, private_key: bytes):
    # 字符串指定編碼(轉(zhuǎn)為bytes)
    text_encrypted_base64 = text_encrypted_base64.encode('utf-8')
    # base64解碼
    text_encrypted = base64.b64decode(text_encrypted_base64)
    # 構(gòu)建私鑰對象
    cipher_private = PKCS1_v1_5.new(RSA.importKey(private_key))
    # 解密(bytes)
    text_decrypted = cipher_private.decrypt(text_encrypted, Random.new().read)
    # 解碼為字符串
    text_decrypted = text_decrypted.decode()
    return text_decrypted

if __name__ == '__main__':
    # 生成密鑰對
    # create_rsa_pair(is_save=True)
    # public_key = read_public_key()
    # private_key = read_private_key()
    public_key, private_key = create_rsa_pair(is_save=False)

    # 加密
    text = '123456'
    text_encrypted_base64 = encryption(text, public_key)
    print('密文:', text_encrypted_base64)

    # 解密
    text_decrypted = decryption(text_encrypted_base64, private_key)
    print('明文:', text_decrypted)

總結(jié)

到此這篇關(guān)于利用Python實現(xiàn)RSA加密解密的文章就介紹到這了,更多相關(guān)Python RSA加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲抓取論壇關(guān)鍵字過程解析

    Python爬蟲抓取論壇關(guān)鍵字過程解析

    這篇文章主要介紹了Python爬蟲抓取論壇關(guān)鍵字過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Python制作豆瓣圖片的爬蟲

    Python制作豆瓣圖片的爬蟲

    本文給大家分享的是作者制作的爬取豆瓣首頁圖片的爬蟲代碼,代碼很簡單,大家可以參考下思路,希望可以幫到大家
    2017-12-12
  • django 模型字段設置默認值代碼

    django 模型字段設置默認值代碼

    這篇文章主要介紹了django 模型字段設置默認值代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Pytorch實現(xiàn)Fashion-mnist分類任務全過程

    Pytorch實現(xiàn)Fashion-mnist分類任務全過程

    這篇文章主要介紹了Pytorch實現(xiàn)Fashion-mnist分類任務全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 基于Python實現(xiàn)格斗小游戲的示例代碼

    基于Python實現(xiàn)格斗小游戲的示例代碼

    格斗游戲,曾經(jīng)是街機廳里最火爆的游戲之一,甚至可以把“之一”去掉,那個年代的格斗游戲就是街機游戲的王。本文就來用Python實現(xiàn)一個簡單的格斗游戲,感興趣的可以了解一下
    2023-03-03
  • python實現(xiàn)感知器算法(批處理)

    python實現(xiàn)感知器算法(批處理)

    這篇文章主要為大家詳細介紹了python實現(xiàn)感知器算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中的信號通信 blinker的使用小結(jié)

    python中的信號通信 blinker的使用小結(jié)

    信號是一種通知或者說通信的方式,信號分為發(fā)送方和接收方,信號的特點就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號通信 blinker的相關(guān)知識,感興趣的朋友一起看看吧
    2021-10-10
  • python3使用mutagen進行音頻元數(shù)據(jù)處理的方法

    python3使用mutagen進行音頻元數(shù)據(jù)處理的方法

    mutagen是一個處理音頻元數(shù)據(jù)的python模塊,支持多種音頻格式,是一個純粹的python庫,僅依賴python標準庫,可在Python?3.7及以上版本運行,支持Linux、Windows?和?macOS系統(tǒng),這篇文章主要介紹了python3使用mutagen進行音頻元數(shù)據(jù)處理,需要的朋友可以參考下
    2022-10-10
  • python Tornado框架的使用示例

    python Tornado框架的使用示例

    這篇文章主要介紹了python Tornado框架的使用示例,幫助大家更好的利用python進行web開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • Pycharm編輯器技巧之自動導入模塊詳解

    Pycharm編輯器技巧之自動導入模塊詳解

    我們在編程過程中經(jīng)常會不經(jīng)意的使用到一些尚未導入的類和模塊,在這種情況下Pycharm會幫助我們定位模塊文件位置并將其添加到導入列表中,這也就是所謂的自動導入模塊功能。本文給大家介紹了關(guān)于Pycharm編輯器技巧之自動導入模塊的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07

最新評論