gpt4 book ai didi

c++ - Openssl RC4 vs C++ RC4(加盐)

转载 作者:行者123 更新时间:2023-12-02 10:23:48 25 4
gpt4 key购买 nike

我正在使用 RC4 C++ 程序进行更多工作,以与命令行参数兼容。
我想知道是否有人可以指出一些关于命令行 openssl rc4 在加密和解密时如何使用盐的体面文档的方向,这样我就可以在我的程序中加入一些兼容性。
感谢几天前这里有人的帮助,一旦合并了 EVP_bytestokey 函数,我的程序就与非盐版本兼容。我查看了 openssl 使用的 EVP_bytestokey 函数,文档显示它可以采用 salt 参数:

“盐参数在推导中用作盐:它应该指向一个 8 字节的缓冲区,如果没有使用盐,它应该指向 NULL。”

我用 CLI 给我的 salt 创建了一个 unsigned char 数组,并将它们作为它们的 ASCII 等价物存储在数组中,以作为 SALT 参数传入(到 EVP_bytestokey)。
然后我比较了文件大小,它显示文件的加密/加盐版本比原始文件大 16 个字节。似乎 CLI 版本在文件中添加了“salted__”,但这仅占 16 个字节中的 8 个。
有谁知道额外的 8 个字节来自哪里?据我了解,在传递到 RC4_setkey 的 key 流生成器之前,盐会预先添加到密码短语中,所以我不明白为什么要在“salted__”之外更改文件大小。

另外,您认为我使用 SALT 数组的方向是否正确,将十六进制值存储为 ASCII 等价物?

我有此处使用的 C 函数的文档,但我似乎找不到任何有关 CLI 版 native 制的具体信息,因此我将不胜感激在这里获得的任何帮助。

最佳答案

所以对于任何好奇的人,我想通了。带有 salt 选项的 OpenSSL RC4 在加密后将 16 个字节添加到文件的开头。前 8 个字节是:“salted__”,后 8 个字节是实际的盐,显示为无符号字符。 Lseek 可用于跳过字节 1-8,然后字节 9-16 可以加载到无符号字符数组中(大小必须为 8 个字节)。然后,该数组应转换为 (const unsigned char*),同时作为盐传递给 EVP_bytestokey(),这是第三个参数。

至于盐的用户输入选项,我将其设置为将两位十六进制输入输入到一个 int 变量中,然后我将其传递给 unsigned char salt 数组。

关于c++ - Openssl RC4 vs C++ RC4(加盐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694194/

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