# Authentication

## <span style="color:#7b2cbf">Encryption Guidelines</span>

All API requests must be encrypted using AES (ECB mode, PKCS5Padding) before transmission.
This page provides the required imports, encryption/decryption utilities, and essential developer tips to ensure proper integration.

```java
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
```
## <span style="color:#7b2cbf">Encrypting Request Payloads</span>
Use the encrypt method to convert plaintext request data into an AES-encrypted Base64 string.
## <span style="color:#7b2cbf">Encrypt Function</span>

```java
public static String encrypt(String strToEncrypt, String secret) {
    try {
        if (CommonUtil.isEmpty(strToEncrypt)) return "";
        SecretKeySpec secretKeySpec = getKeySpec(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        byte[] encryptedBytes = cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    } catch (Exception e) {
        LOGGER.error("Error while encrypting: " + e.getMessage());
        return null;
    }
}

```
## <span style="color:#7b2cbf">Generate SecretKeySpec</span>
The following utility converts the provided secret key into a 128-bit AES key using SHA-256 hashing.

```java
private static SecretKeySpec getKeySpec(String secretKey) throws NoSuchAlgorithmException {
    byte[] key = secretKey.getBytes(StandardCharsets.UTF_8);
    MessageDigest sha = MessageDigest.getInstance("SHA-256");
    key = sha.digest(key);
    key = Arrays.copyOf(key, 16); // Use first 128 bits for AES-128
    return new SecretKeySpec(key, "AES");
}
```
## <span style="color:#7b2cbf">Decrypt Function</span>
Use the following method to decrypt API responses that return AES-encrypted data.

```java
public static String decrypt(String strToDecrypt, String secret) {
    try {
        if (CommonUtil.isEmpty(strToDecrypt)) return "";
        SecretKeySpec secretKeySpec = getKeySpec(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } catch (Exception e) {
        LOGGER.error("Error while decrypting: " + e.getMessage());
        return null;
    }
}
```
## <span style="color:#7b2cbf">Encryption Secret Key</span>
Use the following secret key for all encryption and decryption:
```java
JaAnE1431042241474139605aholD
```
## <span style="color:#7b2cbf">Developer Tips</span>

<TipGood>Remove double quotes from plaintext before encrypting</TipGood>
<TipGood>Avoid trailing whitespaces in the encrypted string</TipGood>
<TipGood>Ensure encrypted payloads are passed in the correct request field (e.g., <code>payload</code>, <code>requestData</code>)</TipGood>


