我正在为我的小项目实现 Ipsec管道,我应该从Ip头开始加密来自网络的传入数据包(IPSEC的隧道模式)。
我的问题是,DES_ncbc_encrypt()
的{{1}} api是否可以用于一次性加密整个有效载荷,或者我应该每次使用64位输入调用上述api ?
答案 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。