0

Triple DES を使用してデータを暗号化および復号化するコードがあります。すべてがコードで正常に動作します。

トリプルデスについて質問です。トリプル DES は、暗号化プロセスの実行中にデータ サイズを変更します。私はググって、得た答えに完全に混乱していました。

変わりますか。はいの場合は、暗号化されたデータのサイズを見つける方法を意味します。

コードは次のとおりです。

unsigned char   initVector[8];
unsigned char*  block;
int     j;

    memset(initVector, 0xEE, sizeof(initVector));
    nBlocks = dwDataSize / 8;

    for (i=0; i < nBlocks; i++)
    {
        block = (unsigned char*) pData + i*8;
        memset(initVector, 0xEE, sizeof(initVector));
        des_ede3_cbc_encrypt((unsigned char *)block,(unsigned char *)block, 8,
                m_Schedule1 , m_Schedule2, m_Schedule3, (C_Block *)initVector, DES_ENCRYPT);

別のディスカッションで、サイズが変わることを見ました。

ここにリンクがあります。 暗号化された文字列の長さ

よろしく、シヴァ。/

4

2 に答える 2

4

TripleDES は、ブロック暗号プリミティブです。ブロック暗号は、キーが既知である場合にのみ元に戻すことができるキーに基づいて、入力データのブロック (ランダム データと区別できないと想定される)の順列を作成することによって機能します。

そのため、暗号化されたデータは、入力データとまったく同じ量のスペースを占有します (最終ブロックのパディングを除く)。一般的なブロック サイズは、4 ~ 32 バイトの任意の 2 の累乗です。

(思考実験: 暗号文を入力より短くすることは不可能です。これは、2 つの異なる入力を同じ暗号文にマッピングする必要があるためです。これは不可能です。逆に、暗号文が長い場合、決して暗号化の結果ではない特定の暗号文であるため、「ランダムなデータと区別がつかない」わけではありません。)

于 2012-09-10T07:41:14.120 に答える
0

場合によります。より正確には、次の要素に依存します。

  1. 暗号文と平文のエンコーディング
  2. 暗号化モード
  3. パディング モードとブロック サイズ
  4. NONCE または IV
  5. (オプションの) 認証タグ

3DES はブロック暗号です。これは、一見ランダムなビット順列です (ほとんどの場合、最小要素としてバイトを使用します)。単一の 3DES は入力として 64 ビット/8 バイトを使用し、同じサイズを生成します

最初のものから始めましょう: テキスト (文字列) を暗号化する場合、最初に文字列をバイトにエンコードする必要があります。暗号テキストが文字列に格納されることが予想される場合は、結果を文字列に変換する必要があります。

次は暗号化モードです。これが 3DES ブロック暗号をストリーム暗号 (CTR など) に変換するモードである場合、NONCE を除いて、入力サイズは出力サイズと同じになります。

次に、パディング モードがあります。ECB または CBC モードの暗号化を使用する場合、プレーン テキストが lengthで、バイト単位のブロック サイズである場合はパディングする必要があります。プレーンテキストとパディングを区別できる場合は、パディングのバイトを追加できます。できない場合は、常にパディングする必要があり、パディングのバイトを追加します。PKCS#5 パディング (最も一般的なもの) は常にパディングします。xx % n != 0n0n - 11n

通常、IV または NONCE も転送する必要があります。どちらも通常、ブロックサイズとほぼ同じです。一般的なオプションは、IV を暗号文の先頭に追加することです。これは、適用する CBC モードの暗号化に対して実行されることがよくあります。新しい (ランダムな) IV を作成してはならない唯一のケースは、キーを 1 回だけ使用する場合です。

ほとんどの場合、暗号化テキストに整合性保護を追加する必要があります。たとえば GCM モードの暗号化を使用する場合は、認証タグ用に追加のスペースが必要です。MAC または HMAC を使用する場合、これを暗号文の上に含める必要があります。

パディングをなくすために使用できる暗号テキスト盗用などもあります。最後に、単一ブロック暗号化の特定のモードでは IV が必要ない場合があります。

あなたの場合

バイトを扱う場合、CBC モードの暗号化を使用し、IV を先頭に追加して PKCS#5 パディングを使用すると、計算は(n) + ((x) + (n - x % n)). 3DES の場合、n = 8.

于 2012-09-11T18:14:19.243 に答える