import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Arrays; import java.util.Base64; public class ApiDecrypter { public static String decryptResponse(String encryptedData, String date, String tokenSecret) throws Exception { // Décodage Base64 byte[] encrypted = Base64.getDecoder().decode(encryptedData); // Génération de la clé (SHA256 de date + tokenSecret) MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] key = sha256.digest((date + tokenSecret).getBytes(StandardCharsets.UTF_8)); // Génération de l'IV (16 premiers octets du SHA256 de la clé) byte[] iv = Arrays.copyOf(sha256.digest(key), 16); // Déchiffrement AES-256-CBC Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv)); byte[] decrypted = cipher.doFinal(encrypted); return new String(decrypted, StandardCharsets.UTF_8); } } // Exemple d'utilisation public static void main(String[] args) throws Exception { String encryptedResponse = "U2FsdGVkX1+abc123..."; // Réponse chiffrée de l'API String date = "2026-05-20 14:30:00"; // Date envoyée dans la requête String tokenSecret = "votre-token-secret"; // Votre clé secrète API String json = decryptResponse(encryptedResponse, date, tokenSecret); System.out.println(json); }