코딩마을방범대

포스트맨을 이용한 AES 암호화 본문

🎃 기타/포스트맨

포스트맨을 이용한 AES 암호화

신짱구 5세 2023. 6. 2. 17:38

포스트맨에서 AES 암호화한 값을 변수로 쓰고 싶을 경우

어쩔 수 없이 포스트맨에서 제공하는 javaScript로 추출할 수 밖에 없다!

 

나의 경우 자바의 AES256 암호화값을 포스트맨에서 그대로 변수로 사용해야 하는데,

물론 API를 통해 response 값을 받을 수 있지만

코드를 수정하지 않는 선에서 해결해야 했다

 

 

 

아래는 자바에서의 AES256 암호화 내용이다

 public static String encrypt(String str, String seckey) throws IOException, GeneralSecurityException {
    byte[] keyData = seckey.substring(0, 32).getBytes();
    String IV = seckey.substring(0, 16);

    SecretKey secureKey = new SecretKeySpec(keyData, "AES");

    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
    c.init(Cipher.ENCRYPT_MODE, secureKey, new IvParameterSpec(IV.getBytes()));

    byte[] encrypted = c.doFinal(str.getBytes("UTF-8"));
    String enStr = new String(Base64.encodeBase64(encrypted));
    return enStr;
}

 

 

 

JavaScript를 테스트 사이트 등 따로 빼서 테스트할 경우

아래와 같이 crypto-js 라이브러리를 불러와서 사용하면 된다

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<script>
    var secKey = "시크릿키";
    var data = "암호화 할 데이터";

    var keyData = secKey.substring(0, 32);
    var IV = secKey.substring(0, 16);

    var encrypted = CryptoJS.AES.encrypt(
        data,
        CryptoJS.enc.Utf8.parse(keyData),{
            iv: CryptoJS.enc.Utf8.parse(IV),
            padding: CryptoJS.pad.Pkcs7,
            mode: CryptoJS.mode.CBC
        }
    );

    console.log(encrypted.toString())
</script>

 

위 코드 실행 시 정상적으로 암호화 된 값이 출력되었고,

자바에서의 AES256 인코딩 값과 동일했다

 

 


 

 

위 코드를 바탕으로 포스트맨에 작성해보았다

스크립트 소스를 통해 import 할 수 없으니 require() 를 사용해 불러왔다

var data = "{{data}}";
{{data}} 는 포스트맨에 저장된 변수를 불러오려 한 거였으나..
var data = "{{data}}";

var keyData = secKey.substring(0, 32);
var IV = secKey.substring(0, 16);

var CryptoJS = require("crypto-js");

var encrypted = CryptoJS.AES.encrypt(
    data,
    CryptoJS.enc.Utf8.parse(keyData),{
        iv: CryptoJS.enc.Utf8.parse(IV),
        padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.CBC
    }
);

console.log(encrypted.toString())

 

 

그런데!

 

 

전혀 다른 값이 나왔다..

길이부터 값까지 하나도 맞는게 없다...

 

 

 

알고보니 더블괄호 안에 변수명을 넣어도 먹히지 않는거였다ㅎㅎ

생각해보니 String값인데 안에 아무리 괄호 넣어도 먹히는게 이상하긴하다

var data = "{{data}}";

 

위 코드를 아래처럼 수정해서 성공 ㅎㅎ

var data = pm.environment.get("data");

 

 

 

 

 

추가로 디코딩은 하기 코드를 참고!

decodeByAES256(key, data){
    const cipher = CryptoJS.AES.decrypt(
    	data, 
        CryptoJS.enc.Utf8.parse(key), {
        iv: CryptoJS.enc.Utf8.parse(IV),
        padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.CBC
    });
    return cipher.toString(CryptoJS.enc.Utf8);
};

 

 


 

 

💡 TIPS!

 

자바스크립트 테스트 사이트

 

아래 사이트를 추천!

https://jsbin.com/memikolaco/edit?html,console,output 

 

JS Bin

Sample of the bin:

jsbin.com

 

Default로 html 코드가 짜여져 있고 script만 붙여넣으면 편하게 테스트 가능이다!

 

 

 


 

참고사이트

What Is Cryptography? And How to Encrypt Data in Postman

CryptoJS를 이용한 AES256 암호화 / 복호화

104. (javascript/자바스크립트) CryptoJS 사용해 aes 128 , aes 256 비밀키 인코딩 (encode) 및 디코딩 (decode) 수행 실시

Pkcs5 #334

 

 

 

SMALL