无法使用DES cbc加密对数据包数据进行加密

时间:2012-09-04 16:12:23

标签: openssl

我正在为我的小项目实现 Ipsec管道,我应该从Ip头开始加密来自网络的传入数据包(IPSEC的隧道模式)。

我的问题是,DES_ncbc_encrypt()的{​​{1}} api是否可以用于一次性加密整个有效载荷,或者我应该每次使用64位输入调用上述api ?

1 个答案:

答案 0 :(得分:0)

DES_ncbc_encrypt()的源代码从您指定的长度向后循环,加密自己的8个字节的块;它应该在一次通话中加密所有内容:

来自OpenSSL的des中的ncbc_enc.c:

for (l-=8; l>=0; l-=8)
            {
            c2l(in,tin0);
            c2l(in,tin1);
            tin0^=tout0; tin[0]=tin0;
            tin1^=tout1; tin[1]=tin1;
            DES_encrypt1((DES_LONG *)tin,_schedule,DES_ENCRYPT);
            tout0=tin[0]; l2c(tout0,out);
            tout1=tin[1]; l2c(tout1,out);
            }
        if (l != -8)
            {
            c2ln(in,tin0,tin1,l+8);
            tin0^=tout0; tin[0]=tin0;
            tin1^=tout1; tin[1]=tin1;
            DES_encrypt1((DES_LONG *)tin,_schedule,DES_ENCRYPT);
            tout0=tin[0]; l2c(tout0,out);
            tout1=tin[1]; l2c(tout1,out);
            }

你能展示一些代码吗?你得到什么错误?

大多数OpenSSL加密/解密功能都提倡使用更高级别的EVP例程 - 你试过吗?请参阅the EVP docs here