Encryption Erlang Crypto New API Crypto_one_time/5不接受选项:[{encrypt,true}]

Encryption Erlang Crypto New API Crypto_one_time/5不接受选项:[{encrypt,true}],encryption,erlang,cryptoapi,Encryption,Erlang,Cryptoapi,Erlang Crypto新API不适用于Crypto_ops() Erts:10.6.4 例如: Key = <<1:128>>. IV = <<0:128>>. crypto:crypto_one_time(aes_128_ctr, Key, IV, <<"test">>,true). 在新API中选择加密({encrypt,true})或解密({encrypt,false}) 当我这

Erlang Crypto新API不适用于
Crypto_ops()

Erts:10.6.4

例如:

Key = <<1:128>>.
IV = <<0:128>>.
     
crypto:crypto_one_time(aes_128_ctr, Key, IV, <<"test">>,true).
在新API中选择加密({encrypt,true})或解密({encrypt,false})

当我这样做时:

Key = <<1:128>>.
IV = <<0:128>>.
crypto:crypto_one_time(aes_128_ctr, Key, IV, <<"test">>,[{encrypt,true}]).
Key=。
IV=。
crypto:crypto_一次性(aes_128_ctr,Key,IV,[{encrypt,true}])。
我收到错误消息:

* exception error: {badarg,{"api_ng.c",72},"Bad enc flag"}
 in function  crypto:ng_crypto_one_time_nif/5
    called as crypto:ng_crypto_one_time_nif(aes_128_ctr,
                                            <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1>>,
                                            <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
                                            <<"test">>,
                                            [{encrypt,true}])
*异常错误:{badarg,{“api_ng.c”,72},“坏的enc标志”}
函数内加密:ng_crypto_one_time_nif/5
称为加密:一次加密,
,
,
,
[{encrypt,true}])

在对github上的Erlang存储库进行了一些调查之后,我发现函数
crypto:crypto_one_time/5
已更改,以便使用选项,请参阅和进行比较,请参阅。此外,如果您查看并尝试与进行比较,您将看到变量的规范和变量名称已从
EncryptFlag::boolean()
更改为
flagooptions::crypto_opts()| boolean()
。因此,这意味着看起来像是传递选项,如
[{encrypt,true/false}]
[{padding,true/false}]
在OTP-22.2.8中根本没有实现,为了开始使用这些选项,您需要将Erlang升级到最新版本。

看起来ERTS 10.6.4在加密一次性实现中存在缺陷。我正在运行erts 11.0,它工作正常:

alexei@MacBook-Pro src%erl
Erlang/OTP 23[erts-11.0][source][64位][smp:8:8][ds:8:8:10][async threads:1][hipe][dtrace]
Eshell V11.0(使用^G中止)
1> 键=。
2> IV=。
3> crypto:crypto_一次性(aes_128_ctr,Key,IV,[{encrypt,true}])。

只需更新Erlang版本。

问题不是设置{encrypt,true}而不是设置true。我想在那里传递填充选项。如果不写[{encrypt,true},{padding,XXX}],这是不可能的,因此,对于这种情况,您需要将Erlang升级到最新版本。这不是最好的。主意OTP 22和Erts-10.6.4的地方太多了:(是的,但据我所知,选项不是在22版本中添加的。
OTP-23.0.3
-spec
flagooptions::crypto_opts()| boolean()
OTP-22.2.8-spec
EncryptFlag::boolean())
在相同的
crypto_init/3
函数中。因此,这意味着在
Erts:10.6.4
中根本没有实现选项传递。刚刚升级到Erlang/OTP 23[Erts-11.0.3]。现在可以工作了。非常感谢
Key = <<1:128>>.
IV = <<0:128>>.
crypto:crypto_one_time(aes_128_ctr, Key, IV, <<"test">>,[{encrypt,true}]).
* exception error: {badarg,{"api_ng.c",72},"Bad enc flag"}
 in function  crypto:ng_crypto_one_time_nif/5
    called as crypto:ng_crypto_one_time_nif(aes_128_ctr,
                                            <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1>>,
                                            <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
                                            <<"test">>,
                                            [{encrypt,true}])