2013-06-07 5 views
1

Я пытаюсь расшифровать зашифрованный текст. У меня есть значение соли, количество итераций и длина ключа. Но у меня нет значения вектора инициализации (IV), как я могу это сделать и расшифровать. У меня также есть секретный ключ.Как расшифровать зашифрованный текст pbkdf2, не зная IV

На какое-то время я использую какое-то случайное значение IV, размер которого составляет 16 байт. Но все же я не могу правильно расшифровать значение. Может ли кто-нибудь помочь, поскольку я застрял с этим в течение длительного времени?

Ниже приведены значения, которые были предоставлены мне.

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); 
+2

PBKDFv2 является ** хеш **. Это (надеюсь) математически невозможно расшифровать. – SLaks

+2

Когда вы расшифровываете, вы получаете 16 байт мусора, за которым следует правильно расшифрованное сообщение? Если это так, то первые шестнадцать байтов cyphertext являются IV. – rossum

+0

Пожалуйста, не нужно, чтобы возможность расшифровки без исключения не означала, что вы нашли ключ; любой зашифрованный текст с правильным расширением размера блока для блочного шифрования, который не использует аутентифицированный режим шифрования. Он просто расшифровывает мусор. –

ответ

1

Вы не можете расшифровать первый блок CBC зашифрованного шифротекста, если вы не знаете IV.

Это, однако, не исключено, что вы можете получить значение IV:

  • часто значение IV в 16 байт извлекается после ключевого байта) генерируется из PBKDF;
  • IV часто предшествует зашифрованному тексту, в результате чего один фрагмент мусора перед полным открытым текстом во время дешифрования;
  • не является безопасным, но IV также опущены или набор к постоянному значению, при всех нулей IV является наиболее распространенным (это идентично в режиме CBC, чтобы не использовать какой-либо IV.)
+0

Я отредактировал свой вопрос, я дал подробности о значениях, которые я я использую для расшифровки. Я пробовал ваши предложения, но не получил правильное значение. Поскольку я новичок в этом поле шифрования, вы можете предложить, что я делаю правильно? Было бы здорово, если бы вы могли указать мне на сайт, где я могу узнать о шифровании с помощью pskc в деталях. – user966682

+0

К сожалению, я сам по себе, поэтому часто не знаю, откуда моя информация. Я также отвечу на ваш вопрос. –

Смежные вопросы