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