gpt4 book ai didi

c - 不兼容的 AES 实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:30:23 24 4
gpt4 key购买 nike

我从这个 site 编译了一些 AES 实现代码,它应该执行 128 位 key 加密。我测试了可以一起工作的加密/解密程序。

但是,如果我使用上述代码加密任何内容,然后尝试使用 linux 中内置的 openssl 工具对其进行解密,我就是无法解密它,它甚至会向我记录错误的魔数(Magic Number) 错误。同样,如果我用 openssl 加密任何东西并尝试用代码解密将不起作用。我尝试了两个 cbc ecb。

如果他们都在实现 AES,它的工作方式不应该相同吗?

最佳答案

看起来 C 代码正在使用 ECB 并且没有填充。因此,请尝试加密 16 字节的消息(倍数),后跟 16 字节的值 16(pkcs#7 填充)。或者在 openssl 中使用 16 字节的消息(倍数)和 --nopad(更有可能工作)。此外,请使用 aes-128-ecb 或任何名称。

分组密码适用于文本“ block ”——在本例中,它的长度为 16 个字符。因此,如果您不想担心填充问题,则需要提供确切的 block 数。

此外,ecb 模式(在没有额外处理的情况下依次处理每个 block )对于许多用途来说并不安全。请参阅维基百科文章(查看企鹅照片)。

[编辑:] [编辑 2:]

> echo -n "abcdabcdabcdabcd" > msg
> wc msg
0 1 16 msg
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv ""
[noise]
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" | wc
0 1 16

自己尝试上面的代码,看看其他代码是否解密它(编辑 2 明确设置 key ,并删除 IV 和盐 - 不确定后两者在这种情况下的用途)。

[编辑 3:]

据我所知,问题与密码转换为 key 的方式有关。 openssl 似乎在做一些我无法摆脱的额外事情,除非我将 key 指定为十六进制 (-K 0)。如果我这样做,其他程序将无法运行(需要密码)。

对不起,我没有想法。

关于c - 不兼容的 AES 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com