2017-05-11 1 views
1

Ich habe einige Fernet Keys generiert und im str-Format als Referenz gespeichert. Jetzt muss ich diese Fernet-Schlüssel im str-Format zu 32 url-safe base64 codierten Bytes verschlüsseln, um meine Daten zu entschlüsseln.Python decode fernet Schlüssel

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') 

ich Code unten bin mit der Datei zuzugreifen und s

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

zu entschlüsseln Aber ist mir die folgenden Fehler geben:

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

Ich sehe yo nicht Du speicherst die Schlüssel in Base 64, str tut das nicht, oder? –

+0

Fernet-Schlüssel werden in str konvertiert und in einer Datei gespeichert. Jetzt muss ich diese String-Werte zurück zu fernet Schlüssel, d. H. 32 url-safe base64 –

+0

jeden Hinweis auf diese ?????? –

Antwort

0

Versuchen Sie den Code ohne base64 Ihren Schlüssel kodiert dh:

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))