0

現在、Javaコードをobject-cに移植しようとしています。ただし、コード内でCBCBlockCipherMac.updateとCBCBlockCipherMac.doFinalに出くわしましたが、このメソッドが何を実行し、どのように機能するかを理解していません。混乱のポイントは、21文字の文字列がバイトに変換されてこのメソッドに渡され、出力が[4]バイトの文字列であった場合です。誰かがこの方法がどのように機能するかを私に説明してください。サンプルコードは以下に添付されています。この方法で何が起こっているのかを段階的に説明してください。

public String getMyMac("Thisstringis21inlength")
     {
    byte [] macKey = {0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}
         byte[] macBytes = new byte[4];
         CBCBlockCipherMac macCipher = new CBCBlockCipherMac(new DESedeEngine());
         DESedeParameters keyParameters = new DESedeParameters(macKey);
         DESedeEngine engine = new DESedeEngine();
         engine.init(true, keyParameters);
         macCipher.init(keyParameters);
         byte[] macDataBytes = macData.getBytes(); 
         macCipher.update(macDataBytes, 0, macData.length());
         macCipher.doFinal(macBytes, 0);
         byte[] encodedMacBytes = Hex.encode(macBytes);
         String mac = new String(encodedMacBytes);
         return mac;
     }
4

1 に答える 1

2

メッセージ認証コード (MAC)を生成するために、CBC モードで 3DES を使用しているようです。MAC は、最後の暗号化ブロックの最初の 4 バイトで構成されます。ブロック サイズに収まらない場合、入力はゼロで埋められます。

于 2012-07-17T14:39:27.103 に答える