Зашифрованный текст Datapower. Расшифрованное значение алгоритма CB C состоит из введенных и нежелательных символов в java - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь расшифровать зашифрованный текст из мощности данных в Java, используя приведенный ниже код. Использую ключевой механизм Simmri c. Код ниже может расшифровать данные, но дает мне данные с нежелательными символами, за которыми следует простой текст. Я попытался подставить ответ для 16 символов, но обнаружил, что не все расшифрованные тексты содержат одинаковые нежелательные символы. Не могли бы вы помочь мне в этом. Оцените ваш ответ.


public String decrypt(String encryptedText, String basekey){

byte[] encryptedTextByte = DatatypeConverter.parseBase64Binary(encrypted text);

byte[] key = Base64.getDecoder().decode(base64Key.getBytes());

byte[] IV = new byte[16];

IvParameterSpec ivSpec = new IvParameterSpec(iv);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding);

 SecretKeySpec secret = new SecretKeySpec(key, "AES");

cipher.init(Cipher.DECRYPT_MODE, secret, ivSpec);

return new String(cipher.doFinal(encryptedTextByte));

}

Encryption logi c in datapower

<xsl:variable name="ciphertext">
  <xsl:value-of select="dp:encrypt-data($algorithm,$session-key,$node)"/>
</xsl:variable>

1 Ответ

0 голосов
/ 09 июля 2020

Я нашел решение, я использую подстроку 16, чтобы удалить отступы. Но в идеале я должен удалить байты. Поэтому перед преобразованием в String я удалю лишние байты, а затем конвертирую их в String. Итак, у меня есть только простой текст.

public String decrypt(String encryptedText, String basekey){

byte[] encryptedTextByte = DatatypeConverter.parseBase64Binary(encrypted text);

byte[] key = Base64.getDecoder().decode(base64Key.getBytes());

byte[] IV = new byte[16];

IvParameterSpec ivSpec = new IvParameterSpec(iv);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding);

 SecretKeySpec secret = new SecretKeySpec(key, "AES");

cipher.init(Cipher.DECRYPT_MODE, secret, ivSpec);

byte[] decryptedBytes = cipher.doFinal(encryptedTextByte);

// Removing extra characters here

byte[] plainBytes = Arrays.copyOfRange(decryptedBytes, 16, decryptedBytes.length);

return new String(plainBytes);

}
...