尝试在Elixir中创建sha256键和哈希(从python代码转换) 我正在创建一个使用谷歌云存储的灵丹妙药项目。我们的一些客户要求要求每个客户使用各自独立的加密密钥

尝试在Elixir中创建sha256键和哈希(从python代码转换) 我正在创建一个使用谷歌云存储的灵丹妙药项目。我们的一些客户要求要求每个客户使用各自独立的加密密钥,python,google-cloud-storage,elixir,sha256,Python,Google Cloud Storage,Elixir,Sha256,我可以使用手动提供的Google代码来创建它们,但是我想知道如何实现自动化(主要是出于好奇)。python代码是: 我想我把一些长生不老药的代码放在一起做这个把戏: key = 32 |> :crypto.strong_rand_bytes |> Base.encode64 hash = :sha256 |> :crypto.hash(key) |> Base.encode64 IO.puts "Key: #{key}\nSHA256 hash: #{hash}" 然而

我可以使用手动提供的Google代码来创建它们,但是我想知道如何实现自动化(主要是出于好奇)。python代码是:

我想我把一些长生不老药的代码放在一起做这个把戏:

key = 32 |> :crypto.strong_rand_bytes |> Base.encode64
hash = :sha256 |> :crypto.hash(key) |> Base.encode64
IO.puts "Key: #{key}\nSHA256 hash: #{hash}"
然而,当我尝试使用Elixir生成的密钥和哈希时,Google抱怨如下:

{
  "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"
}
当然,Python代码是可以工作的,所以这里似乎有一些不同


有人知道这是为什么吗?谢谢

似乎在elixir中,您正在对base64编码的密钥进行散列,而原始python实现对密钥的原始字节进行散列

以下方面应起作用:

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}"

似乎在elixir中,您正在对base64编码的密钥进行散列,而原始python实现对密钥的原始字节进行散列

以下方面应起作用:

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}"

帕特里克,谢谢你听到这个。真不敢相信我竟然没有注意到。。。。一天太长了!就这样,帕特里克,谢谢你抓住了。真不敢相信我竟然没有注意到。。。。一天太长了!就这样。