无法理解CBCBlockCipherMac.update

时间:2012-07-17 14:08:13

标签: encryption bouncycastle

目前我正在尝试将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;
     }

1 个答案:

答案 0 :(得分:2)

似乎它在CBC模式下使用3DES来生成message authentication code (MAC)。 MAC由最后一个加密块的前四个字节组成。如果输入不适合块大小,则输入用零填充。