亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用提供的密鑰加密文本 python

使用提供的密鑰加密文本 python

慕桂英4014372 2023-05-23 10:20:18
如何使用我自己的密鑰加密?我已經通過網絡搜索來執行此操作。如何使用我自己的密鑰加密?在 python 中,我更喜歡 密碼學。它不斷彈出錯誤Fernet key must be 32 url-safe base64-encoded bytes和TypeError: a bytes-like object is required, not 'str'。我正在嘗試創建一個私有變量函數。我是python新手。這是我未完成的代碼。感謝您的幫助。from cryptography.fernet import Fernetimport inspectimport hashlibimport base64     #Fernet key must be 32 url-safe base64-encoded bytesdef encode(key, string):    encoded_chars = []    for i in xrange(len(string)):        key_c = key[i % len(key)]        encoded_c = chr(ord(string[i]) + ord(key_c) % 256)        encoded_chars.append(encoded_c)    encoded_string = "".join(encoded_chars)    return base64.urlsafe_b64encode(encoded_string)class private:    class sec_storage:        data = dict()        hashed_data = dict()    class var:        def create(var,value):            # creates key based on caller            key = hashlib.sha224(str(inspect.stack()).encode()).hexdigest()            cipher_suite = Fernet(base64.b64encode(key))   #Fernet key must be 32 url-safe base64-encoded bytes            # encrypts using key            encoded_text = cipher_suite.encrypt(value)            # prepares storage            hashed_var = hashlib.sha224("plus".join(list(var.encode(),key[:12])).hexdigest())            hashed_value = hashlib.sha224(value.encode()).hexdigest()[12:30]            private.sec_storage.data[hashed_var] = encoded_text            private.sec_storage.hashed_data[hashed_var] = hashed_value        def read(var):            # creates key based on caller            key = hashlib.sha224(str(inspect.stack()).encode()).hexdigest()            cipher_suite = Fernet(base64.b64encode(key))     #Fernet key must be 32 url-safe base64-encoded bytes如你看到的cipher_suite = Fernet(base64.b64encode(key))   #Fernet key must be 32 url-safe base64-encoded 我如何解決它?
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

這里的主要問題是 Fernet 需要一個 url 安全的 base64 編碼字符串,它可以解碼為 32 字節。這種結構的安全性依賴于這 32 個字節包含足夠的熵,這樣攻擊者就無法猜到它。

在您的示例中,您使用的是堆棧跟蹤的 SHA224 哈希。有幾個問題在起作用:

  • 224 位/每字節 8 位 = 28 字節,這不是足夠長的輸出。

  • 散列堆棧跟蹤不是派生密鑰的安全方法。

  • 當它應該使用urlsafe_b64encode.

一般來說,最好使用 生成您的 Fernet 密鑰Fernet.generate_key(),但這需要您將密鑰存儲在某個地方以備后用。

查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 325 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號