[Typescript] CryptoJS 사용기

2024. 12. 1. 23:50프로그래밍/Node

개요

API 사용을 위해 요청 헤더 조건으로 crypto js를 통한 암호화가 필요했다.

기존의 javascript 코드로 작성된 레퍼런스는 많았으나 '@types/crypto-js'를 사용하게 되면 CommonJS 모듈 방식을 사용하지 않기 때문에 라이브러리 분석을 통해 기존 코드를 타입스크립트에 호환되게끔 치환한다.(GPT를 사용하면 편하게 변환해줄 수 있긴 하겠다만 사용을 지양하는 편이라..크흠)

 

과정

기본적으로 알아야 할 지식은 Crypto JS가 어떤 과정을 통해 암호화 하는가이다.

1. SHA256, 512, HMAC 등 여러가지 암호화 알고리즘을 통해 해쉬값을 생성함

2. 생성해낸 해쉬값을 32비트의 고정 길이 단어 배열을 생성해낸다.

3. 생성된 단어배열을 인코딩(UTF-8, UTF-16, HEX)을 통하여 최종적으로 암호화된 문자열을 생성한다.

 

기존코드

# For Javascript
const alg = 'SHA512'
const hash = crypto.createHash(alg)
const queryHash = hash.update(query, 'utf-8').digest('hex')
# For Typescript
const hash =cryptoJS.algo.SHA512.create();
const queryWordArray = hash.update(query).finalize();
const queryHash = queryWordArray.toString(cryptoJS.enc.Hex)
// 혹은
const queryHash = cryptoJS.enc.Hex.stringify(queryWordArray);

 

기존의 digest 메서드가 finalize로 대체되었다. 

 

 

후기

개인적으로는 이전 코드가 훨씬 간결하고 사용감이 좋은 것 같다.

어찌됐건 직접 분석해보니 기존에 잘 모르던 namespace 문법에 대해서도 이해도가 올라간 거 같다.

또한 npmjs나 github에 샘플 코드가 잘 정리된 라이브러리도 있지만 대부분 그렇지 않은 경우가 많으며 공식문서보다도 라이브러리를 직접 까보는 편이 시간은 더 걸리더라도 도움이 될때가 훨씬 많다. TypeOrm은 하도 많이 봐서 적응이 됐지만 새로 분석하는 라이브러리에 한해서는 시간이 좀 걸리는 거 같다.