1

暗号化されたテキストを解読しようとしています。ソルト値、反復回数、およびキーの長さがあります。しかし、初期化ベクトル (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);
4

1 に答える 1

1

IV がわからない場合、CBC で暗号化された暗号文の最初のブロックを解読することはできません。

ただし、IV 値を取得できる可能性は低くありません。

  • 多くの場合、IV 値は PBKDF から生成されたキー バイトの後に取得される 16 バイトです。
  • 多くの場合、IV は暗号文の先頭に追加されるため、復号化中に完全な平文の前に 1 ブロックのガベージが発生します。
  • 安全ではありませんが、IV も省略されるか一定値に設定され、すべてゼロの IV が最も一般的です (これは、CBC モードでは IV を使用しない場合と同じです)。
于 2013-06-07T19:58:03.757 に答える