成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊如何使用 Python 實現(xiàn) RSA 加密

開發(fā) 前端
電報加密所使用的密碼本,就是初代網(wǎng)絡安全所使用的加密方式,用法為:發(fā)信時將內容翻譯為密文發(fā)出,收到電報的一方,使用相同的密碼本才能解密出正確的信息,否則看到的就是一堆亂碼。

楔子

本次來聊一聊如何用 Python 實現(xiàn) RSA,我們知道 RSA 是一種非對稱加密算法,并且應用非常廣泛,比如 HTTPS。

所以在介紹 RSA 之前,需要先解釋一下什么是對稱加密和非對稱加密。

對稱加密

在重要信息的傳遞過程中,人們總是希望信息不會被偷看、不會被篡改,偽造等。為了達到這個要求人們一直在不斷努力著。

電報加密所使用的密碼本,就是初代網(wǎng)絡安全所使用的加密方式,用法為:發(fā)信時將內容翻譯為密文發(fā)出,收到電報的一方,使用相同的密碼本才能解密出正確的信息,否則看到的就是一堆亂碼。

這種傳統(tǒng)的加密方式叫做對稱加密,而對稱加密所使用的算法包括:DES、3DES、AES、DESX、Blowfish、RC4、RC5、RC6,這些算法就可以看成密鑰、或者理解為上面的密碼本。這些算法也被稱為: "對稱加密算法"或者"傳統(tǒng)加密算法",一方使用算法進行加密,然后另一方使用相同的算法進行解密。

我們以《福爾摩斯探案集之跳舞的小人》一案中出現(xiàn)的小人為例。

圖片圖片

每一個小人都代表一個英文字符,至于小人手中的旗子則是用來分隔單詞的、也就是表示一個單詞的邊界。傳遞信息的時候,將信息用小人來代替,然后另一方看到小人的時候,再將出現(xiàn)的小人解析成信息。順便一提,劇中的女主是黑幫首領的女兒,犯人就是使用這些小人來向女主傳遞信息,威脅她回去。

這些小人和英文字符之間的對應關系就相當于密鑰,此時就屬于對稱加密。因為無論是發(fā)信人還是收信人,使用的是相同的密鑰,即:小人代表的含義都是一樣的。

因此不難看出,對稱加密的安全性非常依賴于密鑰,泄漏密鑰就意味著任何人都可以對發(fā)送或接收的消息進行解密,所以密鑰的保密性對通信安全來說至關重要。福爾摩斯在解析出這些小人代表的含義之后,用這些小人發(fā)送信息將犯人引誘了出來。因此對于這種對稱加密來說,密鑰的安全是極其重要的。

那么對稱加密有哪些優(yōu)缺點呢?

  • 優(yōu)點:計算量小、加密速度快、加密效率高;
  • 缺點:密鑰需要傳遞,難以確保密鑰安全性。缺乏簽名功能,不能核對發(fā)信人身份;

非對稱加密

在對稱加密中,密鑰(也就是使用的加密算法,如發(fā)電報時的密碼本、小人和英文字符的對應關系)的保密性至關重要。戰(zhàn)爭時期,電報密碼本需要通過人工渠道傳遞,這樣發(fā)報雙方才能放心地使用。

但在如今的網(wǎng)絡通信中,顯然不可能再使用人工渠道的方式來傳遞密鑰,只有通過網(wǎng)絡來傳遞才高效快捷。這樣就有了一個矛盾:密鑰是用來保證網(wǎng)絡傳輸安全的,這個對于網(wǎng)絡安全至關重要的密鑰又需要網(wǎng)絡來傳遞給對方。

保存密鑰最安全的方式就是不告訴任何人,不進行傳遞,但對稱加密中,解密方必須要得到對應的密鑰,這就又要求密鑰必須進行傳遞,可一旦傳遞密鑰就有丟失的風險。這個"雞生蛋、蛋生雞"的問題一直困擾著人們,直到出現(xiàn)了一種算法,這套算法生成的密鑰分為兩個部分:公鑰和私鑰。

這個一分為二的密鑰對有如下特點:

  • 公鑰和私鑰是一個算法中兩個不同、但內在又相關聯(lián)的參數(shù)集合,同時生成,但可以獨立使用;
  • 公鑰加密的數(shù)據(jù)只有對應的私鑰才可以解密(公鑰加密后公鑰也不能解密);
  • 私鑰加密的數(shù)據(jù)也只有對應的公鑰才可以解密;

圖片圖片

常見的非對稱加密算法有:RSA、DSA、ECC、Diffie-Hellman、El Gamal 等。

RSA 算法概述

對稱加密的模式很好理解,但非對稱加密算法的上述特點卻讓我們感覺很神奇,下面就來簡單看看,上述這些特點在數(shù)學上是怎樣實現(xiàn)的吧。在非對稱加密算法中 RSA 是使用最廣泛的一種,我們就以 RSA 為例,一會兒再介紹怎么用 Python 實現(xiàn)它。

RSA 算法是 1977 年由共同在麻省理工學院工作的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。RSA 就是他們三人姓氏開頭字母拼在一起組成的。

RSA 加密利用了"單向函數(shù)"正向求解很簡單,反向求解很復雜的特性。思想如下:

  • p1*p2 = n,已知 p1、p2 求 n 簡單,已知 n 求 p1、p2 很難;
  • (m^e) % n = c,已知 m、e、n 求 c 簡單,已知 e、n、c 求 m 很難;

這個應該很好理解,然后是 RSA 的工作原理,以下是 ChatGPT 告訴我的,我們不懂也沒關系。

  • 選擇兩個大的質數(shù) p 和 q,且通常這兩個數(shù)的大小相近。
  • 計算這兩個數(shù)的乘積 n = p * q,這個 n 將作為公鑰和私鑰的一部分。
  • 計算 n 的歐拉函數(shù) ?(n) = (p - 1) * (q -1)。
  • 選擇一個整數(shù) e,使得 1 < e < ?(n) 且 e 與 ?(n) 互質,e 通常選取65537,因為它是一個質數(shù),且為形式為 2 的冪次方加 1。
  • 計算 e 關于 ?(n) 的模逆元 d,即找到 d 使得 e * d = 1 % ?(n)。

然后便可得到公鑰 (e, n) 和私鑰 (d, n),而它們滿足如下關系。

圖片圖片

其中 M 是明文,C 是密文,明文 M 用公鑰加密得到密文 C,密文 C 用私鑰解密得到明文 M。當然這個過程反過來也是一樣,也可以用私鑰進行加密,公鑰進行解密,這個過程一般用作簽名。

RSA 算法的安全性基于 RSA 問題的困難性,也就是基于大整數(shù)因子分解的困難性上。這種算法非常可靠,密鑰越長,它就越難破解。根據(jù)已經(jīng)披露的文獻,目前被破解的最長 RSA 密鑰是 768 個二進制位。

也就是說,長度超過 768 位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024 位的 RSA 密鑰基本安全,2048 位的密鑰極其安全。

非對稱加密的算法比對稱加密要復雜且耗時,位數(shù)越多越耗時。因此在實際使用中,一般是先用非對稱加密過程傳遞對稱加密的密鑰,之后再使用對稱加密來保證后續(xù)的通信,這樣安全性與速度就可以達到一個平衡,HTTPS 所使用的就是這種方式。

Python 實現(xiàn) RSA

首先需要安裝一個庫:pycryptodome,直接 pip 安裝即可,這個庫里面包含了大量實現(xiàn)好的加密算法。

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import binascii

def generate_keys():
    # 生成長度為 2048 的秘鑰
    key = RSA.generate(2048)
    # 生成公鑰
    private_key = key.export_key()
    # 生成私鑰
    public_key = key.publickey().export_key()
    return private_key, public_key

def encrypt_message(public_key, message):
    cipher = PKCS1_OAEP.new(RSA.import_key(public_key))
    # 使用公鑰加密,得到密文(bytes 對象)
    encrypted_message = cipher.encrypt(message.encode())
    # 一般會轉成十六進制進行傳輸
    return binascii.hexlify(encrypted_message).decode()

def decrypt_message(private_key, encrypted_message):
    cipher = PKCS1_OAEP.new(RSA.import_key(private_key))
    # 解密
    decrypted_message = cipher.decrypt(
        binascii.unhexlify(encrypted_message)
    )
    return decrypted_message.decode()

# 生成密鑰
private_key, public_key = generate_keys()
message = "高老師總能分享出好東西"
# 使用公鑰加密
encrypted = encrypt_message(public_key, message)
print(encrypted)
"""
41bc8709cb82e1f9a13d18f101538c536f760210c11···
"""
print(len(encrypted))
"""
512
"""
# 使用私鑰解密
decrypted = decrypt_message(private_key, encrypted)
print(decrypted)
"""
高老師總能分享出好東西
"""

以上就是使用 Python 實現(xiàn) RSA 算法。

責任編輯:武曉燕 來源: 古明地覺的編程教室
相關推薦

2009-09-09 18:50:23

C# 加密RSA

2021-05-14 14:33:07

Python加密貨幣

2021-07-14 06:45:49

Windows.NetTopshelf

2020-05-27 10:10:56

對稱加密Hash算法數(shù)字簽名

2024-12-09 08:27:59

敏感數(shù)據(jù)加密

2022-10-21 07:33:12

2022-06-17 07:49:14

緩存LRU

2021-02-07 23:58:10

單例模式對象

2024-08-07 08:34:56

2021-03-29 08:54:42

StampedLock線程開發(fā)技術

2024-05-31 08:45:24

2022-01-26 07:25:09

PythonRSA加解密

2009-07-24 09:02:24

ASP.Net RSA

2023-01-03 07:40:27

自定義滑塊組件

2019-12-16 14:53:44

機器學習人工智能計算機

2009-02-10 10:58:59

2013-09-22 17:08:37

RSA加密組件

2025-03-10 07:49:13

2019-05-13 09:11:41

加密解密Python攻擊

2024-05-23 11:26:02

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕国产精品 | 农村妇女毛片精品久久久 | 亚洲午夜精品一区二区三区他趣 | 亚洲国产精品久久久久婷婷老年 | 欧美涩涩网 | 日韩免费 | 久久亚洲欧美日韩精品专区 | 国产精品污www一区二区三区 | 国内精品伊人久久久久网站 | 99视频精品| aaa综合国产| 精品亚洲一区二区 | 亚洲视频一区二区三区 | 亚洲精品久久久久久国产精华液 | 在线亚洲欧美 | 成人精品一区二区三区 | 亚洲看片| 精品视频一区二区三区在线观看 | 99精品在线免费观看 | 亚洲男人天堂2024 | 一区二区三区韩国 | 91国产视频在线 | 老司机67194精品线观看 | 欧美视频成人 | 国产一区二区在线观看视频 | 国产精品一区二区三区在线 | 91中文在线观看 | 亚洲欧美在线一区 | 99国产精品99久久久久久粉嫩 | 97久久超碰| 亚洲激情专区 | 欧美一区在线视频 | 九色一区| 人人射人人草 | 欧美日韩理论 | 日本二区在线观看 | 91精品国产综合久久久久久首页 | 嫩草影院网址 | av一区在线观看 | 国产一区在线免费 | 伊人久操|