【问题标题】:python decode fernet keypython 解码 fernet 密钥
【发布时间】:2017-05-11 14:09:47
【问题描述】:

我生成了一些 fernet 密钥并以 str 格式存储以供参考。 现在,我需要将这些 fernet 密钥以 str 格式编码为 32 个 url 安全的 base64 编码字节来解密我的数据。

from cryptography.fernet import Fernet as frt
keys=set()
keybin='keys'
keybin=open(keybin,'w')

for i in range(r.randint(5,14)):
 key=frt.generate_key()
 keys.add(key.decode())

for k in keys:
 keybin.write(str(k))
 keybin.write('\n')

我正在使用下面的代码来访问文件并解密s

 key=linecache.getline(cfile,x).encode()
 key=base64.b64encode(key)
 print(key)
 f=frt(key)
 token =f.decrypt(s.encode())

但是给了我以下错误:

    "Fernet key must be 32 url-safe base64-encoded bytes."
ValueError: Fernet key must be 32 url-safe base64-encoded bytes.

【问题讨论】:

  • 我没有看到您将密钥存储在 base 64 中,str 不会这样做,对吧?
  • Fernet 密钥被转换为 str 并存储在文件中。现在我需要将这些字符串值编码回 Fernet 键,即 32 url-safe base64
  • 这方面的任何线索??????

标签: python cryptography


【解决方案1】:

尝试不使用 base64 对密钥进行编码的代码,即:

from cryptography.fernet import Fernet as frt

key=frt.generate_key()
s = "message"
print('input string: {0}'.format(s))
#key=base64.b64encode(key) #no need to do this
print('key: {0}, type: {1}'.format(key, type(key)))
f=frt(key)
token = f.encrypt(s.encode('utf-8')) #need to convert the string to bytes
print ('encrypted: {0}'.format(token))
output = f.decrypt(token)
output_decoded = output.decode('utf-8')
print ('decrypted: {0}'.format(output_decoded))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2021-02-15
    • 2022-11-16
    • 2013-05-23
    相关资源
    最近更新 更多