gpt4 book ai didi

c - DES 的三重 DES 实现

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

我正在尝试使用 DES API 来实现 3Des,如下所示:

des(input, output, key, mode)

其中输入、输出和 key 各为 8 个字节,模式标识加密和解密类型。我想知道是否可以有一个输出长度可变的 3Des 算法?

这是我用 C 编写的代码,用于使用此 API 创建具有超过 8 字节 key 的 3des。

但我不知道它是否工作正常或者是否可以更改输出字节。

unsigned char TripleDes(uchar *input, uchar *output,uchar *deskey, int mode)
{
uchar tt[100];
uchar tmpInput[100];
uchar tmpOutput[100];
int i=0, j=0;

memset(tt, 0, sizeof(tt));
memset(tmpInput, 0, sizeof(tmpInput));
memset(tmpOutput, 0, sizeof(tmpOutput));

j = strlen(input);
memcpy(tmpInput, input, j);
while(j/8!=0){
j-=8;
if (mode) { //Encrypt
des(tmpInput+i*8, tmpOutput+i*8, deskey,1);
des(tmpOutput+i*8, tt, deskey+8, 0);
des(tt,tmpOutput+i*8, deskey, 1);
}
else { //Decrypt
des(tmpInput+i*8, tmpOutput+i*8, deskey, 0);
des(tmpOutput+i*8, tt, deskey+8, 1);
des(tt, tmpOutput+i*8, deskey, 0);
}
i++;
}

strcpy(output, tmpOutput);
return;
}

有什么想法吗?

最佳答案

我终于可以解决这个问题了,不是使用这个API,而是使用下面链接中的类中提到的方法:

https://github.com/petricek/eternity-service/blob/master/Common/RSARef/source/desc.c

我需要 CBC 模式下的三重类, key 长度为 16。我更改了这些类(class),效果很好:

 DES3_CBCInit
{
.....
deskey(context->subkeys[0], key, encrypt);
deskey(context->subkeys[1], &key[8], !encrypt);
}

DES3_CBCUpdate
{
.....

DESFunction (work, context->subkeys[0]);
DESFunction (work, context->subkeys[1]);
DESFunction (work, context->subkeys[0]);

......
}

关于c - DES 的三重 DES 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829039/

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