코딩마을방범대
포스트맨을 이용한 AES 암호화 본문
포스트맨에서 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
Default로 html 코드가 짜여져 있고 script만 붙여넣으면 편하게 테스트 가능이다!
참고사이트
What Is Cryptography? And How to Encrypt Data in Postman
CryptoJS를 이용한 AES256 암호화 / 복호화
104. (javascript/자바스크립트) CryptoJS 사용해 aes 128 , aes 256 비밀키 인코딩 (encode) 및 디코딩 (decode) 수행 실시
'🎃 기타 > 포스트맨' 카테고리의 다른 글
포스트맨 데이터 백업하기 (0) | 2025.01.17 |
---|---|
GET 메소드의 파라미터 기호 공백 처리 (0) | 2023.06.02 |
포스트맨에서 response 값 변수로 사용하기 (0) | 2023.05.28 |