2017-05-11 1 views
1

나는 fernet 키를 거의 생성하지 않았고 참조 용으로 str 형식으로 저장했다. 이제 데이터를 암호 해독하기 위해 32 개의 URL로 안전한 base64로 인코딩 된 바이트에 str 형식으로이 fernet 키를 인코딩해야합니다.파이썬 디코딩 fernet 키

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. 
+0

요 베이스 64에 키를 저장하면, str은 그렇게하지 않습니까? –

+0

Fernet 키는 str로 변환되어 파일에 저장됩니다. 이제 나는이 문자열 값을 Fernet 키, 즉 32 개의 url-safe base64로 다시 인코딩해야합니다. –

+0

이것에 대한 단서 ?????? –

답변

0

이 키를 인코딩 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))