2012-07-17 115 views
0

我目前正尝试将一个java代码移植到object-c。然而,我在代码中遇到了CBCBlockCipherMac.update和CBCBlockCipherMac.doFinal,但不明白这些方法做了什么以及它们是如何工作的。混淆的地方在于一个21个字符的字符串被转换为字节并传递给该方法,输出是一个[4]字节的字符串。有人请向我解释这种方法是如何工作的。示例代码如下所示。请在步骤解释什么是这个方法去:无法理解CBCBlockCipherMac.update

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; 
    } 
+0

如果macData包含任何不适合单个字节的字符,或者平台编码与预期不同,则此代码将失败。而且,如果遇到任一故障模式,它将简单地计算不正确的MAC。 – 2012-07-17 16:44:19

回答