2

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

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

4

1 回答 1

0

for 的源代码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 例程——你试过吗?请参阅此处的 EVP 文档

于 2012-11-13T18:30:17.607 回答