gpt4 book ai didi

c - 如何使用 OpenSSL 库在 C 中实现三重 DES 加密

转载 作者:行者123 更新时间:2023-12-04 04:39:55 24 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 库在 C 中实现三重 DES 加密,但我在密码学方面并不是那么专业。我找到了一个有用的示例代码 here对于 DES ECB 加密,但我找不到有关如何实现 3DES 的示例代码,而且大多数网络资源仅描述了如何将 OpenSSL 用作工具。

我已经为特定目的实现了 DES ECB,如下所示

typedef struct
{
size_t size;
unsigned char* data;
} byte_array, *byte_array_ptr;

用于加密
byte_array_ptr des_encrypt_to_pin_block(byte_array_ptr key_bytes, byte_array_ptr xor_bytes)
{
if ((key_bytes->size != 8) || (xor_bytes->size != 8))
return NULL;

DES_key_schedule schedule;
const_DES_cblock key_data;
const_DES_cblock xor_data;
DES_cblock buffer;

memcpy(&key_data, key_bytes->data, key_bytes->size);
memcpy(&xor_data, xor_bytes->data, xor_bytes->size);

if (DES_set_key(&key_data, &schedule) < 0)
{
printf("ERROR: %s", "DES Set Key Error!");
return NULL;
}

DES_ecb_encrypt(&xor_data, &buffer, &schedule, DES_ENCRYPT);

byte_array_ptr pin_block;
pin_block = (byte_array_ptr)malloc(sizeof(size_t) + 8);
pin_block->size = 8;
pin_block->data = (unsigned char *)malloc(pin_block->size);

memcpy(pin_block->data, &buffer, pin_block->size);

return pin_block;
}

和解密
byte_array_ptr des_decrypt_to_xor_bytes(byte_array_ptr key_bytes, byte_array_ptr pin_block)
{
if ((key_bytes->size != 8) || (pin_block->size != 8))
return NULL;

DES_key_schedule schedule;
const_DES_cblock key_data;
const_DES_cblock pin_data;
DES_cblock buffer;

memcpy(&key_data, key_bytes->data, key_bytes->size);
memcpy(&pin_data, pin_block->data, pin_block->size);

if (DES_set_key(&key_data, &schedule) < 0)
{
printf("ERROR: %s", "DES Set Key Error!");
return NULL;
}

DES_ecb_encrypt(&pin_data, &buffer, &schedule, DES_DECRYPT);

byte_array_ptr xor_bytes;
xor_bytes = (byte_array_ptr)malloc(sizeof(size_t) + 8);
xor_bytes->size = 8;
xor_bytes->data = (unsigned char *)malloc(xor_bytes->size);

memcpy(xor_bytes->data, &buffer, xor_bytes->size);

return xor_bytes;
}

但我不知道如何为 3DES 做到这一点。

任何的想法?

最佳答案

OpenSSL 为所有加密方案的 EDE 模式下的三重 DES 提供了一组函数(使用 key #1 加密,使用 key #2 解密,使用 key #3 加密)。当键 #1 等于键 #3 时,也有常见的情况,这种情况下也有函数。
因此,如果您拥有所有三个键,则功能是:

DES_ecb3_encrypt()
DES_ede3_cbc_encrypt()
DES_ede3_ofb_encrypt()
DES_ede3_cfb_encrypt()

如果您只有两个键,则功能是:
DES_ecb2_encrypt()
DES_ede2_cbc_encrypt()
DES_ede2_ofb_encrypt()
DES_ede2_cfb_encrypt()

关于c - 如何使用 OpenSSL 库在 C 中实现三重 DES 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19055226/

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