如何在不知道IV的情况下解密pbkdf2加密文本

我正在尝试解密加密文本。 我有盐值,迭代次数和密钥长度。 但是我没有初始化向量(IV)值,我该如何解决这个问题。 我也有秘密钥匙。

暂时我使用的是一些大小为16字节的随机IV值。 但我仍然无法正确解密该值。 任何人都可以帮忙,因为我长期坚持这个?


以下是给我的价值。

salt= EW0h0yUcDX72WU9UiKiCwDpXsJg=, Iteration=128,Keylenght=16. MasterKeyName="Passphrase1", MACMethod algo = hmac-sha1, MACKey="jq/NdikC7AZf0Z+HEL5NrCICV8XW+ttzl/8687hVGHceoyJAaFws+111plQH 6Mlg" encrypted kae = "pM7VB/KomPjq2cKaxPr5cKT1tUZN5tGMI+u1XKJTG1la+ThraPpLKlL2plKk6vQE" and valuemac="lbu+9OcLArnj6mS7KYOKDa4zRU0=". Secret key = "xxxxxxxxxxx". 

下面是我用来解密的代码。

 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spec = new PBEKeySpec(secretkey.toCharArray(), salt, iterationCount, keyStrength); SecretKey tmp = factory.generateSecret(spec); key = new SecretKeySpec(tmp.getEncoded(), "AES"); dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); AlgorithmParameters params = dcipher.getParameters(); iv = "0000000000000000".getBytes(); System.out.println("IV " + new sun.misc.BASE64Encoder().encodeBuffer(iv)); dcipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv)); byte[] decryptedData = new sun.misc.BASE64Decoder().decodeBuffer(base64EncryptedData); byte[] utf8 = dcipher.doFinal(decryptedData); 

如果您不知道IV,则无法解密一块CBC加密密文。

但是,您不可能检索到IV值:

  • 通常,IV值是从PBKDF生成的密钥字节之后检索的16个字节;
  • IV经常被加在密文之前,在解密过程中在完整的明文之前产生一块垃圾;
  • 不安全,但IV也被省略或设置为一个恒定值,全局零IV是最常见的(这在CBC模式下是相同的,不使用任何IV。)