我正在努力将解密函数从.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版本没有启用脏调度程序,但在我调查之前,我不知道我是否正朝着正确的方向前进。
答案 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,但我希望为其他密码做出一些贡献!