gpt4 book ai didi

c - 如何在 OpenSSL 中使用 bcrypt?

转载 作者:行者123 更新时间:2023-11-30 16:23:27 25 4
gpt4 key购买 nike

我想使用 bcrypt 加密来存储密码,并且我知道 OpenSSL 实现了 Blowfish Cipher(我假设这是同一件事)。

我对此页 https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption 中显示的代码进行了一些修改并想出了这个:

int OpenSSLEncrypt(
unsigned char* plaintext,
int plaintext_len,
unsigned char* key,
unsigned char* iv,
unsigned char* ciphertext)
{
EVP_CIPHER_CTX *ctx;

int len;

int ciphertext_len;

if (!(ctx = EVP_CIPHER_CTX_new())) OpenSSLHandleErrors();

if (1 != EVP_EncryptInit_ex(ctx, EVP_bf_cbc(), 0, key, 0))
OpenSSLHandleErrors();

if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
OpenSSLHandleErrors();
ciphertext_len = len;

if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len))
OpenSSLHandleErrors();

ciphertext_len += len;

/* Clean up */
EVP_CIPHER_CTX_free(ctx);

return ciphertext_len;
}

int OpenSSLDecrypt(
unsigned char* ciphertext,
int ciphertext_len,
unsigned char* key,
unsigned char* iv,
unsigned char* plaintext)
{
EVP_CIPHER_CTX *ctx;
int len;
int plaintext_len;

if (!(ctx = EVP_CIPHER_CTX_new())) OpenSSLHandleErrors();

if (1 != EVP_DecryptInit_ex(ctx, EVP_bf_cbc(), NULL, key, 0))
OpenSSLHandleErrors();

if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))
OpenSSLHandleErrors();
plaintext_len = len;

if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len))
OpenSSLHandleErrors();

plaintext_len += len;

/* Clean up */
EVP_CIPHER_CTX_free(ctx);

return plaintext_len;
}

但是我从 OpenSSLEncrypt(...) 获得的密码长度取决于明文输入参数的长度,这不是我所期望的。无论密码的长度如何,我预计输出都是 64 字节长。

此外,我不知道 EVP_EncryptInit_ex 是否需要 EVP_bf_cbc 的 iv(初始化 vector ),并且我没有找到可以帮助我解决此问题的文档。

最佳答案

正如评论中指出的那样,我错误地认为 Blowfish 和 BCrypt 是同一件事,只是因为我在某处读到 B 代表 Blowfish。

我最终遵循了 Cinder Biscuits 的建议,使用 bcrypt 的 OpenBSD 实现,可在以下位置获取

https://github.com/libressl-portable/openbsd/blob/master/src/lib/libc/crypt/bcrypt.c

关于c - 如何在 OpenSSL 中使用 bcrypt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012951/

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