2016-09-23 8 views
0

Google Cloud Storageを使用するElixirプロジェクトを作成中です。当社の顧客要件の中には、各顧客が独自の暗号鍵を利用することを要求するものがあります。Elixirでsha256キーとハッシュを作成しようとしています(Pythonコードから変換する)

手作業で提供されているGoogleコードを使用して作成できますが、私はこれを自動化することに不思議でした(主に私の好奇心から)。 Pythonコードprovided by Googleです:

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

私はトリックを行うに一緒にいくつかのエリクサーコードを入れて考えた:私はGoogleのよう不平を言う私のエリクサー、生成されたキーとハッシュを使用しようとすると、しかし

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

をso:

自然に、Pythonコードが動作するので、ここでいくつかの違いがあるようです。

これはどのような理由がありますか?ありがとう!

答えて

2

エリクシルでは、元のPython実装がキーの生のバイトをハッシュしている間に、base64でエンコードされたキーをハッシュしているようです。

次は動作するはず

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

パトリックは、それをキャッチしていただきありがとうございます。私はそれを気付かなかったとは信じられません....あまりにも長い一日!それはそれだった。 –

関連する問題