Я делаю расшифровку некоторых зашифрованных данных. Скажем, данные являются строго конфиденциальной информацией. Информация шифруется алгоритмом tripledes_cbc
. Секретный ключ, используемый для шифрования информации, зашифрован алгоритмом rsa
.
Но когда я пытаюсь расшифровать информацию с помощью алгоритма DESede/CBC/NoPadding
, я получаю исходные данные вместе с некоторыми символами мусора, добавленными в начале и в конце.
Когда я пытаюсь использовать DES/CBC/PKCS5Padding
вместо DESede/CBC/NoPadding
, я получаю исключение «последний блок неправильно заполнен».
Ниже приведен фрагмент кода. Пожалуйста, дайте мне знать, что я могу сделать, чтобы получить правильный текст без дополнительных отступов:
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");
DES/CBC/PKCS5Padding
не является разумной альтернативойDESede/CBC/NoPadding
. Возможно, вы имели в видуDESede/CBC/PKCS5Padding
? - person President James K. Polk   schedule 28.10.2017