gpt4 book ai didi

c - 与 OpenSSL 命令兼容的关键功能的密码?

转载 作者:太空狗 更新时间:2023-10-29 16:29:16 25 4
gpt4 key购买 nike

例如命令:

openssl enc -aes-256-cbc -a -in test.txt -k pinkrhino -nosalt -p -out openssl_output.txt

输出类似:

key = 33D890D33F91D52FC9B405A0DDA65336C3C4B557A3D79FE69AB674BE82C5C3D2
iv = 677C95C475C0E057B739750748608A49

key 是如何生成的? (C 代码作为答案太棒了,无法要求:))另外,iv是如何产生的?

在我看来像是某种咒语。

最佳答案

OpenSSL 使用函数 EVP_BytesToKey .您可以在 apps/enc.c 中找到对它的调用.如果您没有使用 -md 参数指定不同的摘要,则 enc 实用程序过去在 key 派生算法 (KDF) 中默认使用 MD5 摘要。现在它默认使用 SHA-256。这是一个使用 MD5 的工作示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/evp.h>

int main(int argc, char *argv[])
{
const EVP_CIPHER *cipher;
const EVP_MD *dgst = NULL;
unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
const char *password = "password";
const unsigned char *salt = NULL;
int i;

OpenSSL_add_all_algorithms();

cipher = EVP_get_cipherbyname("aes-256-cbc");
if(!cipher) { fprintf(stderr, "no such cipher\n"); return 1; }

dgst=EVP_get_digestbyname("md5");
if(!dgst) { fprintf(stderr, "no such digest\n"); return 1; }

if(!EVP_BytesToKey(cipher, dgst, salt,
(unsigned char *) password,
strlen(password), 1, key, iv))
{
fprintf(stderr, "EVP_BytesToKey failed\n");
return 1;
}

printf("Key: "); for(i=0; i<cipher->key_len; ++i) { printf("%02x", key[i]); } printf("\n");
printf("IV: "); for(i=0; i<cipher->iv_len; ++i) { printf("%02x", iv[i]); } printf("\n");

return 0;
}

示例用法:

gcc b2k.c -o b2k -lcrypto -g
./b2k
Key: 5f4dcc3b5aa765d61d8327deb882cf992b95990a9151374abd8ff8c5a7a0fe08
IV: b7b4372cdfbcb3d16a2631b59b509e94

它生成与此 OpenSSL 命令行相同的 key :

openssl enc -aes-256-cbc -k password -nosalt -p < /dev/null
key=5F4DCC3B5AA765D61D8327DEB882CF992B95990A9151374ABD8FF8C5A7A0FE08
iv =B7B4372CDFBCB3D16A2631B59B509E94

OpenSSL 1.1.0c changed the digest algorithm用于一些内部组件。以前使用MD5,1.1.0改用SHA256。请注意,此更改不会影响 EVP_BytesToKeyopenssl enc 等命令。

关于c - 与 OpenSSL 命令兼容的关键功能的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488919/

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