現在、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;
}