OTP 24 上的 ExCrypto

ExCrypto on OTP 24

应用程序已升级到 运行 elixir 1.12.2 并使用 OTP 24,我已确认这些是版本 运行ning。

当 运行 进行一些测试时,出现以下错误:

** (UndefinedFunctionError) function :crypto.block_encrypt/4 is undefined or private, use crypto:crypto_one_time/5, crypto:crypto_one_time_aead/6,7 or crypto:crypto_(dyn_iv)?_init + crypto:crypto_(dyn_iv)?_update + crypto:crypto_final instead

我进行的大多数谷歌搜索都建议将 plug_crypto 升级到版本 1.2.2,这已经完成。

此函数 block_encrypt/4 是底层 Erlang 代码,在我的 Elixir 代码中调用 block_encrypt/4 的行是:

ExCrypto.encrypt(content_key, "", content_json)

我找到了一个 ExCrytpo 的 PR,应该可以解决这个问题:https://github.com/ntrepid8/ex_crypto/pull/40

有人留言询问是否需要将代码推送到 hex.pm,并想知道是否有可能此代码尚未发布到 hex.pm?

是的,似乎 ExCrypto 尚未发布包含该 PR 中对 Hex 的更改的版本。最新版本on hex0.10.0,发布于2019年2月20日。PR于2021年5月27日合并。

作为解决方法,您可以使用 git 存储库作为依赖项的来源,而不是 Hex:

{:ex_crypto, git: "https://github.com/ntrepid8/ex_crypto.git", branch: "master"}

固定到特定提交而不是主分支可能是个好主意:

{:ex_crypto,
 git: "https://github.com/ntrepid8/ex_crypto.git",
 ref: "0915c274503f9fc6d6f5fab8c98467e7414cf8fc"}

另一个(可能更好)选项是您可以通过更新代码以直接使用 Erlang :crypto 库来删除对 ExCrypto 的依赖。