c - DES 的三重 DES 实现

标签 c des 3des tripledes

我正在尝试使用 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/

相关文章:

c - 使不产生输出

编译 -ansi -pedantic -Wall 自动切换 gcc

encryption - 在 OpenSSL 命令中选择不同的填充模式

java - 无法写入 JSON : Input length must be multiple of 8 when decrypting with padded cipher

c# - NodeJS 3DES ECB 加密不等于 C# 加密

java - C# DESede 对称 ECB 加密(我很接近 - 字符略有不同)!

javascript - 适用于 C 和 Javascript 的 Base64 库

C 复杂的内存泄漏

c++ - Crypto++ 是否支持 TOFB-I?

Golang 3DES 部分解密加密字符串