2

私は小さなプロジェクトにIpsecパイプラインを実装しています。このプロジェクトでは、ネットワークからの着信パケットをIpヘッダー以降で暗号化することになっています(IPSECのトンネルモード)。

私の質問は、のDES_ncbc_encrypt()apiをopenssl使用してペイロード全体を一度に暗号化できるか、または一度に64ビットの入力で毎回上記のapiを呼び出すことになっていますか?

4

1 に答える 1

0

ソース コードの forDES_ncbc_encrypt()は、指定した長さから逆方向にループし、8 バイトのブロックを独自に暗号化します。1 回の呼び出しですべてを暗号化する必要があります。

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 に答える