2013-12-14 101 views
3

我试图让解密逻辑和knnow是加密的字符串键和盐值已经使用由: 重点:8d6ea4d3e6f8c4f8641516baa5e42b85 转型:AES/CBC/ISO10126PADDING 盐:1c4dd21d7ba43bdd 迭代:0 加密字符串:JO0blEp + nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs =解密使用AES 256使用Java

密钥和盐中给出的样品here..The要点是示出了其中我有这种数据的格式。加密方法基于JDK(SunJCE)的默认JCE提供程序。

现在基于上面的信息,我试图构建解密逻辑。几个疑问: 1.使用AES-265时,它可以有128位密钥和64位盐值吗?或者我错误地解释了这些信息。 2.看到加密的字符串,它看起来像是Base64编码的值,我们需要在解密时解码它。我的理解是否正确? 3.下面是我正在编写的解密逻辑,当我调用doFinal()函数时,出现错误:“javax.crypto.BadPaddingException:给定的最终块未正确填充”。 。 ,我从过去的三天:(这里来袭能否请您指出或给我说在这里用于解密具有infromation确切的代码:

public static void main(String[] args) throws Exception 
{ 
     String encstring = "JO0blEp+nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs=";   
     String salt1 = "1c4dd21d7ba43bdd"; 
     String keyStr = "8d6ea4d3e6f8c4f8641516baa5e42b85"; 


     byte[] keyBytes = Hex.decodeHex(keyStr.toCharArray()); 

     SecretKey secret2 = new SecretKeySpec(keyBytes, "AES"); 

     byte[] iv = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
     AlgorithmParameterSpec params = new IvParameterSpec(iv); 


     Cipher cipher2 = Cipher.getInstance("AES/CBC/ISO10126PADDING", "SunJCE"); 


     cipher2.init(Cipher.DECRYPT_MODE, secret2, params); 
     byte[] encryptedString = Base64.decodeBase64(encstring.getBytes()); 
     byte[] plaintext1 = cipher2.doFinal(encryptedString); 

     System.out.println(new String(plaintext)); 
     } 
    } 

回答

0

首先几点看法:

  • 你说这是AES256(使用256位键),但你的钥匙看起来可能是32个十六进制数字这给柯128位 y数据。

  • 你说你有一个但AES不使用盐。而且你实际上不会在你的代码中使用salt。

  • 请您谈一下0迭代,但是迭代是不是你指定AES,并且它不会是0

我的猜测是,你的关键其实是用来生成一个密码关键。 Somethig像:

SecretKeyFactory factory = SecretKeyFactory.getInstance(algorithm); 
    KeySpec spec = new PBEKeySpec(password, salt, iterations, keyLength); 
    SecretKey theKey = factory.generateSecret(spec); 

拿在回答一看这个问题:Java 256-bit AES Password-Based Encryption

+0

你好,按建议我修改了代码。但仍然没有运气。我得到了同样的错误:“javax.crypto.BadPaddingException:鉴于最后的块没有正确填充。请你指出是否有任何问题在下面的代码或任何建议: – user3101544

+0

有太多未知,你需要有在你的解密工作之前,100%是正确的。BadPaddingException只是解密过程中出现问题的一个症状。除非你能获得有关加密过程的确切信息,否则解密将不会成功。它是一个密码或一个真正的密钥..如果密钥然后它看起来是128位(不是256位),但为什么你有一个盐,迭代是什么?另外,运行在CBC模式,你需要知道确切的IV的价值。 –