日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時(shí)間:2024-04-15 18:12:55 175觀看
導(dǎo)讀楔子本次來聊一聊如何用 Python 實(shí)現(xiàn) RSA,我們知道 RSA 是一種非對稱加密算法,并且應(yīng)用非常廣泛,比如 HTTPS。所以在介紹 RSA 之前,需要先解釋一下什么是對稱加密和非對稱加密。對稱加密在重要信息的傳遞過程中,人們總是希

楔子

5ly28資訊網(wǎng)——每日最新資訊28at.com

本次來聊一聊如何用 Python 實(shí)現(xiàn) RSA,我們知道 RSA 是一種非對稱加密算法,并且應(yīng)用非常廣泛,比如 HTTPS。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

所以在介紹 RSA 之前,需要先解釋一下什么是對稱加密和非對稱加密。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

對稱加密

5ly28資訊網(wǎng)——每日最新資訊28at.com

在重要信息的傳遞過程中,人們總是希望信息不會(huì)被偷看、不會(huì)被篡改,偽造等。為了達(dá)到這個(gè)要求人們一直在不斷努力著。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

電報(bào)加密所使用的密碼本,就是初代網(wǎng)絡(luò)安全所使用的加密方式,用法為:發(fā)信時(shí)將內(nèi)容翻譯為密文發(fā)出,收到電報(bào)的一方,使用相同的密碼本才能解密出正確的信息,否則看到的就是一堆亂碼。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

這種傳統(tǒng)的加密方式叫做對稱加密,而對稱加密所使用的算法包括:DES、3DES、AES、DESX、Blowfish、RC4、RC5、RC6,這些算法就可以看成密鑰、或者理解為上面的密碼本。這些算法也被稱為: "對稱加密算法"或者"傳統(tǒng)加密算法",一方使用算法進(jìn)行加密,然后另一方使用相同的算法進(jìn)行解密。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

我們以《福爾摩斯探案集之跳舞的小人》一案中出現(xiàn)的小人為例。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

每一個(gè)小人都代表一個(gè)英文字符,至于小人手中的旗子則是用來分隔單詞的、也就是表示一個(gè)單詞的邊界。傳遞信息的時(shí)候,將信息用小人來代替,然后另一方看到小人的時(shí)候,再將出現(xiàn)的小人解析成信息。順便一提,劇中的女主是黑幫首領(lǐng)的女兒,犯人就是使用這些小人來向女主傳遞信息,威脅她回去。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

這些小人和英文字符之間的對應(yīng)關(guān)系就相當(dāng)于密鑰,此時(shí)就屬于對稱加密。因?yàn)闊o論是發(fā)信人還是收信人,使用的是相同的密鑰,即:小人代表的含義都是一樣的。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

因此不難看出,對稱加密的安全性非常依賴于密鑰,泄漏密鑰就意味著任何人都可以對發(fā)送或接收的消息進(jìn)行解密,所以密鑰的保密性對通信安全來說至關(guān)重要。福爾摩斯在解析出這些小人代表的含義之后,用這些小人發(fā)送信息將犯人引誘了出來。因此對于這種對稱加密來說,密鑰的安全是極其重要的。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

那么對稱加密有哪些優(yōu)缺點(diǎn)呢?5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

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

5ly28資訊網(wǎng)——每日最新資訊28at.com

非對稱加密

5ly28資訊網(wǎng)——每日最新資訊28at.com

在對稱加密中,密鑰(也就是使用的加密算法,如發(fā)電報(bào)時(shí)的密碼本、小人和英文字符的對應(yīng)關(guān)系)的保密性至關(guān)重要。戰(zhàn)爭時(shí)期,電報(bào)密碼本需要通過人工渠道傳遞,這樣發(fā)報(bào)雙方才能放心地使用。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

但在如今的網(wǎng)絡(luò)通信中,顯然不可能再使用人工渠道的方式來傳遞密鑰,只有通過網(wǎng)絡(luò)來傳遞才高效快捷。這樣就有了一個(gè)矛盾:密鑰是用來保證網(wǎng)絡(luò)傳輸安全的,這個(gè)對于網(wǎng)絡(luò)安全至關(guān)重要的密鑰又需要網(wǎng)絡(luò)來傳遞給對方。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

保存密鑰最安全的方式就是不告訴任何人,不進(jìn)行傳遞,但對稱加密中,解密方必須要得到對應(yīng)的密鑰,這就又要求密鑰必須進(jìn)行傳遞,可一旦傳遞密鑰就有丟失的風(fēng)險(xiǎn)。這個(gè)"雞生蛋、蛋生雞"的問題一直困擾著人們,直到出現(xiàn)了一種算法,這套算法生成的密鑰分為兩個(gè)部分:公鑰和私鑰。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)一分為二的密鑰對有如下特點(diǎn):5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

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

5ly28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

常見的非對稱加密算法有:RSA、DSA、ECC、Diffie-Hellman、El Gamal 等。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

RSA 算法概述

5ly28資訊網(wǎng)——每日最新資訊28at.com

對稱加密的模式很好理解,但非對稱加密算法的上述特點(diǎn)卻讓我們感覺很神奇,下面就來簡單看看,上述這些特點(diǎn)在數(shù)學(xué)上是怎樣實(shí)現(xiàn)的吧。在非對稱加密算法中 RSA 是使用最廣泛的一種,我們就以 RSA 為例,一會(huì)兒再介紹怎么用 Python 實(shí)現(xiàn)它。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

RSA 算法是 1977 年由共同在麻省理工學(xué)院工作的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。RSA 就是他們?nèi)诵帐祥_頭字母拼在一起組成的。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

RSA 加密利用了"單向函數(shù)"正向求解很簡單,反向求解很復(fù)雜的特性。思想如下:5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

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

5ly28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)應(yīng)該很好理解,然后是 RSA 的工作原理,以下是 ChatGPT 告訴我的,我們不懂也沒關(guān)系。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

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

5ly28資訊網(wǎng)——每日最新資訊28at.com

然后便可得到公鑰 (e, n) 和私鑰 (d, n),而它們滿足如下關(guān)系。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

其中 M 是明文,C 是密文,明文 M 用公鑰加密得到密文 C,密文 C 用私鑰解密得到明文 M。當(dāng)然這個(gè)過程反過來也是一樣,也可以用私鑰進(jìn)行加密,公鑰進(jìn)行解密,這個(gè)過程一般用作簽名。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

RSA 算法的安全性基于 RSA 問題的困難性,也就是基于大整數(shù)因子分解的困難性上。這種算法非常可靠,密鑰越長,它就越難破解。根據(jù)已經(jīng)披露的文獻(xiàn),目前被破解的最長 RSA 密鑰是 768 個(gè)二進(jìn)制位。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

也就是說,長度超過 768 位的密鑰,還無法破解(至少?zèng)]人公開宣布)。因此可以認(rèn)為,1024 位的 RSA 密鑰基本安全,2048 位的密鑰極其安全。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

非對稱加密的算法比對稱加密要復(fù)雜且耗時(shí),位數(shù)越多越耗時(shí)。因此在實(shí)際使用中,一般是先用非對稱加密過程傳遞對稱加密的密鑰,之后再使用對稱加密來保證后續(xù)的通信,這樣安全性與速度就可以達(dá)到一個(gè)平衡,HTTPS 所使用的就是這種方式。5ly28資訊網(wǎng)——每日最新資訊28at.com

5ly28資訊網(wǎng)——每日最新資訊28at.com

Python 實(shí)現(xiàn) RSA

5ly28資訊網(wǎng)——每日最新資訊28at.com

首先需要安裝一個(gè)庫:pycryptodome,直接 pip 安裝即可,這個(gè)庫里面包含了大量實(shí)現(xiàn)好的加密算法。5ly28資訊網(wǎng)——每日最新資訊28at.com

from Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_OAEPimport binasciidef generate_keys():    # 生成長度為 2048 的秘鑰    key = RSA.generate(2048)    # 生成公鑰    private_key = key.export_key()    # 生成私鑰    public_key = key.publickey().export_key()    return private_key, public_keydef encrypt_message(public_key, message):    cipher = PKCS1_OAEP.new(RSA.import_key(public_key))    # 使用公鑰加密,得到密文(bytes 對象)    encrypted_message = cipher.encrypt(message.encode())    # 一般會(huì)轉(zhuǎn)成十六進(jìn)制進(jìn)行傳輸    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 實(shí)現(xiàn) RSA 算法。5ly28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-83621-0.html聊聊如何使用 Python 實(shí)現(xiàn) RSA 加密

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 不要在循環(huán)await啦,異步操作的六個(gè)最佳實(shí)踐!

下一篇: 面試官:為什么忘記密碼只能重置,而不能告訴我原密碼?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 双江| 沙田区| 惠东县| 独山县| 舒兰市| 图木舒克市| 冷水江市| 双桥区| 木兰县| 石屏县| 梁山县| 专栏| 宜章县| SHOW| 沙坪坝区| 富平县| 宁安市| 长丰县| 丰都县| 府谷县| 湾仔区| 鄯善县| 呼伦贝尔市| 南靖县| 莒南县| 舞钢市| 沙坪坝区| 邓州市| 铜鼓县| 铜山县| 健康| 延边| 澄江县| 峨眉山市| 岳阳县| 神池县| 南郑县| 浦江县| 留坝县| 丹东市| 华安县|