PHP로 Data 암호화 및 복호화 하기 - AES256

서버에서 동작하는 Application은 Java 기반으로, 그 데이터와 연동되는 다른 API 기능은 PHP로 개발을 진행하는 와중에 두 사이에서 같은 데이터를 암/복호화해서 사용하는 상황이 발생하였습니다.

 

처음엔 Laravel Framework의 Crypt Facades를 사용하여 라라 벨에서만 복호화를 진행하였는데, Java Application에서 암호화시킨 데이터를 같은 맥락으로 Laravel Framework에서 복호화시켜 사용해야 함에 따라 기본 Laravel App Key를 사용했던 Crtpt Facades를 대체하며 같이 Java에서 사용할 AES256 알고리즘 형태의 암복호화 소스가 필요해졌고, PHP는 아래 형태로 개발을 진행하게 되었습니다.

 

[연관글]

 

Java로 Data 암호화 및 복호화 하기 - AES256

 서버에서 동작하는 Application은 Java 기반으로, 그 데이터와 연동되는 다른 API 기능은 PHP로 개발을 진행하는 와중에 두 사이에서 같은 데이터를 암/복호화해서 사용하는 상황이 발생하였습니다.

min-nine.tistory.com


1. Function 생성하기

function aes256Encode($plainText, $secretKey) {
    $ivBytes = chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
    return base64_encode(openssl_encrypt($plainText, "AES-256-CBC", $secretKey, true, $ivBytes));
}

function aes256Decode($encrypt_text, $secretKey) {
    $ivBytes = chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
    return openssl_decrypt(base64_decode($encrypt_text), "AES-256-CBC", $secretKey, true, $ivBytes);
}

 

2. Function 사용하기

$plainText = "안녕! 반가워 나는 김민규라고해!";
$secretKey = "32fakecodingsecretinyouranykey32";

$encryptText = aes256Encode($plainText, $secretKey);
$decryptText = aes256Decode($encryptText, $secretKey);

$data = [
    '당신의 secret Key 32Byte를 입력하세요 ; '=> $secretKey,
    '당신의 secret Key 의 Byte 수는 : '=> mb_strlen($secretKey),
    '암호화된 값'=>$encryptText,
    '복호화된 값'=>$decryptText
];
return response()->json($data);

 

3. 출력