Cryptography 如何在Elixir中进行AES-256-ECB加密?

Cryptography 如何在Elixir中进行AES-256-ECB加密?,cryptography,erlang,elixir,Cryptography,Erlang,Elixir,我有一个遗留应用程序,它有以下PHP代码 <?php $ivSize = openssl_cipher_iv_length('AES-256-ECB'); $iv = openssl_random_pseudo_bytes($ivSize); $input = "eeeeeeeeeeeeeeee"; $key = "dddddddddddddddd"; print base64_encode(openssl_encrypt($input,"AES-256-ECB"

我有一个遗留应用程序,它有以下PHP代码

<?php
  $ivSize = openssl_cipher_iv_length('AES-256-ECB');
  $iv = openssl_random_pseudo_bytes($ivSize);   
  $input = "eeeeeeeeeeeeeeee";
  $key = "dddddddddddddddd";
  print base64_encode(openssl_encrypt($input,"AES-256-ECB", $key,OPENSSL_RAW_DATA,$iv));
?>
我尝试将上面的PHP脚本转换为Elixir,如下所示

 input = "eeeeeeeeeeeeeeee"
 key = "dddddddddddddddd"
 Base.encode64 :crypto.block_encrypt(:aes_ecb, key, string)
我在Elixir中得到了以下输出:

 "Br5nc46qS2eAXajEbP0pGw=="

我错过了什么?我应该怎么做才能在Elixir中获得与PHP相同的输出?

您使用的是256位加密,但您的输入是128位。PHP会自动将键填充到256位,并输入到下一个256位的倍数,因为您明确指定要AES-256-ECB。我不知道它到底是如何填充它们的,但通过一些尝试和错误,我发现密钥填充了空字节,输入填充了PKCS7

下面是PKCS7填充的一个实现:

defmodule PKCS7 do
  def pad(data, block_size) do
    to_add = block_size - rem(byte_size(data), block_size)
    data <> String.duplicate(<<to_add>>, to_add)
  end
end
defmodule PKCS7 do
  def pad(data, block_size) do
    to_add = block_size - rem(byte_size(data), block_size)
    data <> String.duplicate(<<to_add>>, to_add)
  end
end
input = "eeeeeeeeeeeeeeee" |> PKCS7.pad(32)
key = "dddddddddddddddd" <> <<0::128>>
IO.puts Base.encode64(:crypto.block_encrypt(:aes_ecb, key, input))
wenBZciza683mhjk3ydcMeOZBIFais5RNpIQ6jkxLGA=