暗号化されたデータを復号化しています。データが非常に限定的な情報であるとします。情報はtripledes_cbc
アルゴリズムで暗号化されます。情報の暗号化に使用される秘密鍵は、rsa
アルゴリズムで暗号化されています。NoPaddingスキームでtripledes_cbc暗号化を行った後にガベージを取得
しかし、DESede/CBC/NoPadding
アルゴリズムで情報を復号化しようとすると、元のデータが前面と最後に埋め込まれたガベージ文字とともに取得されます。
の代わりにDES/CBC/PKCS5Padding
を使用しようとすると、「最終ブロックが正しく埋められない」という例外が発生します。
以下はコードスニペットです。
KeyStore ks = KeyStore.getInstance("jks");
FileInputStream fis = new FileInputStream(ksFile);
ks.load(fis, "testing".toCharArray());
PrivateKey privateKey = (PrivateKey) ks.getKey("keys", "1234".toCharArray());
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] kekBytes = cipher.doFinal(Base64.decodeBase64(encKey.getBytes("UTF-8")));
SecureRandom random = new SecureRandom();
byte[] iv = new byte[8];
random.nextBytes(iv);
SecretKey key = new SecretKeySpec(kekBytes, "DESede");
Cipher cipher1 = Cipher.getInstance("DESede/CBC/NoPadding");
cipher1.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
byte[] out = cipher1.doFinal(Base64.decodeBase64(data.getBytes("UTF-8")));
System.out.println("Data Length: " + out.length);
String result = new String(out, "UTF-8");
1.新しい作業に3DESを使用しないでください.AESは、現在の対称的な使用方法です。しかし、私の推測では、これは学校プロジェクトであり、学校は現実世界の背後にある10年ほどです。 2. 16進数形式のデータ**の例を提供する**。 – zaph
明らかに、暗号化側でどのようなパディングが使用されているかを調べる必要があります。また、DESまたはDESEDEを使用していますか? 'DES/CBC/PKCS5Padding'は' DESede/CBC/NoPadding'の賢明な選択肢ではないからです。おそらくあなたは 'DESede/CBC/PKCS5Padding'を意味しましたか? –