2016-09-23 2 views
0

Ich bin gerade dabei, ein Elixir-Projekt zu erstellen, das Google Cloud Storage verwendet. Einige unserer Kundenanforderungen schreiben vor, dass jeder Kunde seine eigenen separaten Verschlüsselungsschlüssel verwendet.Versuch, einen Sha256-Schlüssel und Hash in Elixir zu erstellen (Konvertierung aus Python-Code)

Ich kann sie mit dem von Hand bereitgestellten Google-Code erstellen, aber ich fragte mich, ob ich das automatisieren sollte (hauptsächlich aus meiner Neugier). Der Python-Code provided by Google ist:

import base64 
import hashlib 
import os 
key = os.urandom(32) 
print "Key: %sSHA256 hash: %s" % (base64.encodestring(key), base64.encodestring(hashlib.sha256(key).digest())) 

Ich dachte, ich einige Elixir Code zusammen den Trick zu tun:

key = 32 |> :crypto.strong_rand_bytes |> Base.encode64 
hash = :sha256 |> :crypto.hash(key) |> Base.encode64 
IO.puts "Key: #{key}\nSHA256 hash: #{hash}" 

Allerdings, wenn ich versuche, meine Elixir-generated verwenden Schlüssel und Hash Google beschwert sich als Also:

{ 
    "domain": "global", 
    "extendedHelp": "https://cloud.google.com/storage/docs/encryption#customer-supplied_encryption_keys", 
    "message": "Missing a SHA256 hash of the encryption key, or it is not base64 encoded, or it does not match the encryption key.", 
    "reason": "customerEncryptionKeySha256IsInvalid" 
} 

Natürlich funktioniert der Python-Code, so scheint hier etwas Unterschied zu sein.

Hat jemand irgendwelche Ideen, warum das so ist? Vielen Dank!

Antwort

2

Es scheint, dass Sie in elixir den base64-codierten Schlüssel hashing, während die ursprüngliche Python-Implementierung die rohen Bytes des Schlüssels hashed.

sollten folgende Arbeiten:

key = :crypto.strong_rand_bytes(32) 
base64_key = Base.encode64(key) 
base64_hash = :sha256 |> :crypto.hash(key) |> Base.encode64 
IO.puts "Key: #{base64_key}\nSHA256 hash: #{base64_hash}" 
+0

Patrick, danke, dass für den Fang. Ich kann nicht glauben, dass ich das nicht bemerkt habe .... Zu lange eines Tages! Das war's. –

Verwandte Themen