具有密钥导出功能的AES解密

时间:2017-09-12 13:32:43

标签: elixir

我正在努力将解密函数从.NET移植到elixir作为概念证明。

任何人都可以给我一些关于这是否适用于Erlang加密模块的指导?我玩过block_decrypt函数,但我无法得到正确的结果。我在想我的问题来自一个不正确的密钥和IV。

我不确定如何从加密的纯文本值派生字节数据以传递到block_decrypt

以下是我用来尝试解密的elixir代码:

defmodule TestApp.Decrypt do
  @iv <<30,64,180,159,172,197,92,10,197,3,39,75,53,92,93,37>>

  def unpad(data) do
    to_remove = :binary.last(data)
    :binary.part(data, 0, byte_size(data) - to_remove)
  end


  def decrypt(data, key) do
    IO.puts "WOrking to decrypt #{data} using #{key}"
    padded = :crypto.block_decrypt(:aes_cbc256, key, @iv, :base64.decode(data))
    unpad(padded)
  end
end

我有一个32字节的密钥,我正在尝试传入,但是我收到了这个错误:

Erlang error: :notsup 

Crypto Library指出错误的原因是我的erlang版本没有启用脏调度程序,但在我调查之前,我不知道我是否正朝着正确的方向前进。

1 个答案:

答案 0 :(得分:0)

erlang加密错误不是很有帮助。看来您可能指定了错误的密码。您可能想要live-server而不是aes_cbc256。参见http://erlang.org/doc/man/crypto.html#block_decrypt-4

您可能还想签出我正在研究的一个名为Apoc的项目,该项目将这些内容封装到一个更像“类似Elixir”的API中:https://github.com/coderdan/apoc

到目前为止,它在GCM模式下支持AES,但我希望为其他密码做出一些贡献!