2014-09-22 30 views
0

這是有問題的代碼:試圖翻譯AES CTR解密Python代碼的Java

decrypt(self): 
    """Decrypt one block""" 
    data = self.source.read(1024) 
    if not data: 
     return "" 
    iv = data[:16] 
    encrypted = data[16:] 
    counter = Crypto.Util.Counter.new(64, prefix=iv[:8], initial_value=struct.unpack(">Q", iv[8:])[0]) 
    cipher = Crypto.Cipher.AES.new(self.info["CpData"], Crypto.Cipher.AES.MODE_CTR, counter=counter) 
    return cipher.decrypt(encrypted) 

這是我行問題的理解:

counter = Crypto.Util.Counter.new(64, prefix=iv[:8], initial_value=struct.unpack(">Q", iv[8:])[0]) 

它能做什麼和怎麼做我在Java中複製它?目前我有這個,但結果不是我所期望的:

public static byte[] decrypt(byte[] encryptedData) throws Exception { 
    Key key = new SecretKeySpec(keyBytes, "AES"); 
    Cipher c = Cipher.getInstance("AES/CTR/NoPadding"); 

    byte[] iv = Arrays.copyOfRange(encryptedData, 0, 16) ; // first 16 bytes 
    byte[] data = Arrays.copyOfRange(encryptedData, 16, 1024); // rest 

    IvParameterSpec ivSpec = new IvParameterSpec(iv); 

    c.init(Cipher.DECRYPT_MODE, key, ivSpec); 
    byte[] decValue = c.doFinal(data); 
    return decValue; 
} 

Google的時間沒有產生可用的結果。我如何在Java中使用這個反面的東西? 謝謝!

回答

0

快速查看看起來,有8個字節的IV添加到傳入的密文中。提取前8個字節並將它們用作IV來設置AES-CTR。然後解密其餘的密文。