日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python rsa加密二进制文件_用Python中的RSA加密文件

發(fā)布時間:2023/12/4 python 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python rsa加密二进制文件_用Python中的RSA加密文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

公鑰密碼通常只用于少量數(shù)據(jù)。它很慢,很難正確使用。通常的做法是使用其他方法將非對稱問題減少到由共享密鑰提供安全性的問題,然后使用公鑰加密來保護(hù)該共享密鑰。例如:要加密文件,隨機(jī)生成塊或流密碼(例如AES)的密鑰。存儲用此密碼加密的數(shù)據(jù),并將用公鑰加密的密鑰與加密的負(fù)載一起存儲。

要簽署文件,請計(jì)算加密摘要(例如SHA-256)。用私鑰簽署文件摘要并將其存儲在文件旁邊。

下面是加密的大致情況(警告,未經(jīng)測試的代碼,直接在瀏覽器中鍵入):import os

from Crypto.Cipher import AES

from Crypto.PublicKey import RSA

import Crypto.Util.number

def encrypt_file(rsa, input, output):

# Generate secret key

secret_key = os.urandom(16)

# Padding (see explanations below)

plaintext_length = (Crypto.Util.number.size(rsa.n) - 2) / 8

padding = '\xff' + os.urandom(16)

padding += '\0' * (plaintext_length - len(padding) - len(secret_key))

# Encrypt the secret key with RSA

encrypted_secret_key = rsa.encrypt(padding + secret_key, None)

# Write out the encrypted secret key, preceded by a length indication

output.write(str(len(encrypted_secret_key)) + '\n')

output.write(encrypted_secret_key)

# Encrypt the file (see below regarding iv)

iv = '\x00' * 16

aes_engine = AES.new(secret_key, AES.MODE_CBC, iv)

output.write(aes_engine.encrypt(input.read()))

iv是CBCmode of operation的一個

分組密碼的API在PEP 272中描述。不幸的是,它只支持一次加密。對于大型文件,最好逐塊加密;一次只加密一個塊(AES為16字節(jié)),但需要一個更好的加密庫。

請注意,一般情況下,不應(yīng)使用RSA直接加密數(shù)據(jù)。最明顯的問題是攻擊者知道公鑰,因此可以嘗試猜測明文(如果攻擊者認(rèn)為明文可能是swordfish,則攻擊者可以使用RSA公鑰加密swordfish,并將結(jié)果與RSA加密的輸出進(jìn)行比較)。如果您想將文件發(fā)送給多個收件人,另一個需要考慮的問題是,如果RSA加密步驟是確定的,那么攻擊者可以知道明文是相同的,因?yàn)槊芪氖窍嗤摹a槍@些問題的通常防御方法是使用

在這里,上述問題似乎不適用于這種情況。但是,使用無保護(hù)的RSA可能會產(chǎn)生其他弱點(diǎn)。特別是,如果公共指數(shù)非常小(這里不是PyCrypto使用65537的情況),或者您為許多不同的收件人加密相同的材料(同樣,這里可能不是這樣,因?yàn)槊總€消息都有自己的密鑰),那么simple mathematical calculation would allow the attacker to recover the RSA plaintext。為了避免這種攻擊,用RSA加密的值需要“足夠接近”RSA模,這樣加密操作實(shí)際上執(zhí)行模冪運(yùn)算。我建議的填充確保通過生成符合0xff;this is believed to be safe的最高順序字節(jié),盡管在現(xiàn)實(shí)世界中您應(yīng)該使用批準(zhǔn)的填充模式(OAEP)。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python rsa加密二进制文件_用Python中的RSA加密文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。