第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PyCryptoDome cipher.encrypt 將空白文本保存到加密文件

PyCryptoDome cipher.encrypt 將空白文本保存到加密文件

胡子哥哥 2024-01-16 15:03:46
我在加密路徑 accountfile 處的文件內(nèi)容時(shí)遇到很多麻煩。加密確實(shí)有效,因?yàn)榻饷艹晒敵隽吮4娴轿募陌姹镜?accountfile 的路徑。代碼運(yùn)行成功,沒有錯(cuò)誤,但加密后保存的加密文件最終為空。如何讓ptext的內(nèi)容加密成功?def encrypt_account(path, filename, accountfile):    c_file = PurePath(path).parent / (PurePath(filename).parent.name + "c.txt")    file3 = open(c_file, 'rb')    byteskey = file3.read(32)    file3.close()    ckey = bytes(byteskey)    cipher = AES.new(ckey, AES.MODE_CBC)    ptext = open(str(accountfile)).read()# this is the account file    ciphertext = cipher.encrypt(pad(bytes(ptext, "utf-8"), AES.block_size))    with open(str(path.parent / accountfile.stem) + ".enc", 'wb')as c_file:        c_file.write(cipher.iv)        c_file.write(ciphertext)    #c_file.close()    #os.remove(accountfile)
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是一個(gè)確實(shí)有效的示例,但請(qǐng)不要將其用于任何敏感的事情,因?yàn)樗话踩?/p>


正確使用密碼學(xué)原語(yǔ)是困難的;相反,您應(yīng)該使用比您和我更聰明的人編寫的更高級(jí)別的食譜,并證明在正確使用時(shí)是安全的。我對(duì) Python 的推薦是Fernet。


完成此操作后,您可以編寫一些秘密數(shù)據(jù)并生成密鑰,然后運(yùn)行腳本并將秘密數(shù)據(jù)返回給您:


$ echo "Very secret data" > secret.txt

$ dd if=/dev/urandom bs=1 count=32 > key.dat

32 bytes transferred

$ python so64569401.py

b'Very secret data\n'

然而,如上所述,這并不安全,因?yàn)閿?shù)據(jù)未經(jīng)身份驗(yàn)證;密文可以被篡改,并且您不會(huì)知道數(shù)據(jù)不是您放回的數(shù)據(jù)。例如,如果我刪除第一個(gè)加密調(diào)用,然后從加密文件中修改單個(gè)字節(jié)并再次運(yùn)行腳本:


$ hexf secret.txt.enc

$ python so64569401.py

b'Very secRet data\n'

from Crypto.Cipher import AES

from Crypto.Util.Padding import pad, unpad



def read_key(filename) -> bytes:

    with open(filename, "rb") as f:

        key = f.read(32)

        assert len(key) == 32

        return key



def encrypt_file(filename: str, key: bytes) -> str:

    with open(filename, "rb") as f:

        data = f.read()


    cipher = AES.new(key, AES.MODE_CBC)

    cipher_data = cipher.encrypt(pad(data, AES.block_size))


    encrypted_filename = filename + ".enc"


    with open(encrypted_filename, "wb") as f:

        f.write(cipher.iv)

        f.write(cipher_data)


    return encrypted_filename



def decrypt_file(filename: str, key: bytes) -> bytes:

    with open(filename, "rb") as f:

        iv = f.read(AES.block_size)

        cipher_data = f.read()


    cipher = AES.new(key, AES.MODE_CBC, iv=iv)

    return unpad(cipher.decrypt(cipher_data), AES.block_size)



def main():

    key = read_key("key.dat")

    encrypted_filename = encrypt_file("secret.txt", key)

    decrypted_data = decrypt_file(encrypted_filename, key)

    print(decrypted_data)



if __name__ == "__main__":

    main()


查看完整回答
反對(duì) 回復(fù) 2024-01-16
  • 1 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)