2013-02-20 50 views
0

我想执行一个简单的加密和解密AES,我试图使用盐。这些值将被存储在数据库中并从那里检索。 (我不能使用散列)我暂时使用静态键和静态盐。AES Salting迭代,需要多少?

我的问题是我应该做多少次盐析迭代?我的意思是我必须将值存储在数据库中,并且我看到在2次迭代中(128位密钥,42位盐),我得到一个由40个字符组成的152个字符的加密字符串。对于4次迭代,其为40个字符的364个字符,8次迭代的1536个字符,40个字符和16次迭代,为40个字符的可笑的19968个字符。

那么我最佳的迭代次数是多少?

public static String AESencrypt(String value) throws Exception { 
     Key key = generateKey(); 
     Cipher c = Cipher.getInstance(ALGORITHM); 
     c.init(Cipher.ENCRYPT_MODE, key); 

     String valueToEnc = null; 
     String eValue = value; 
     for (int i = 0; i < ITERATIONS; i++) { 
      valueToEnc = salt + eValue; 
      byte[] encValue = c.doFinal(valueToEnc.getBytes()); 
      eValue = new BASE64Encoder().encode(encValue); 
     } 
     return eValue; 
    } 

    public static String AESdecrypt(String value) throws Exception { 
     Key key = generateKey(); 
     Cipher c = Cipher.getInstance(ALGORITHM); 
     c.init(Cipher.DECRYPT_MODE, key); 

     String dValue = null; 
     String valueToDecrypt = value; 
     for (int i = 0; i < ITERATIONS; i++) { 
      byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt); 
      byte[] decValue = c.doFinal(decordedValue); 
      dValue = new String(decValue).substring(salt.length()); 
      valueToDecrypt = dValue; 
     } 
     return dValue; 
    } 
+1

为什么不用原始的'byte []'而不是每次迭代转换为base64? base64步骤可能是你的大部分痛苦。它应该在循环之外。 – mpontillo 2013-02-20 17:44:47

+0

请注意,除了给定的答案,您也可以使用getBytes()而不指定字符编码,使用Sun内部类BASE64Encoder,可能使用“AES”,这将导致ECB模式加密,没有指定IV。我看不到'generateKey()'中的内容,但也许这是最好的。 – 2013-02-20 20:55:52

+0

你为什么这样做?什么,*完全*你认为你实现了吗?请仅以*标准*方式实现*标准*算法,并且不要做任何事情。这是一个灾难的秘诀。 – 2013-02-20 23:31:38

回答

5

盐分用于密码来派生密钥。它不用于密文,即使它是基于64编码。腌制是用来使攻击者难以使用蛮力或彩虹桌找到密码。它通常由PBKDF使用,如PBKDF2,bcrypt或scrypt。

就你的情况而言,无论你加密多少;如果攻击者尝试密钥,解密密文并找到base 64,攻击者就会知道他找到了密钥,并且可以简单地再次执行迭代次数。

一般来说,对事物进行多次加密是没有意义的;分组密码本身应该包含足够数量的“回合”。

+0

所以你的意思是我可以放弃base 64 encoding和salting,并且应该只使用AES中的o/p进行存储? – chettyharish 2013-02-21 14:15:37

+0

您只需要base64将密文存储为字符串(字符)。 AES不需要盐析。也就是说,正如所指出的那样,您的实现似乎缺少其他必要的功能以被视为安全。 – 2013-02-21 16:38:29

+0

你能给我一个链接,我可以理解这样的东西吗? – chettyharish 2013-02-21 17:33:47