프로젝트 진행중...
암호화!
암호화는 중요하다. 특히 현대적인 웹사이트에서는 절대로 무시할 수 없는 부분이 암호화인데, 그런 면에서 우리 팀은 이번에 암호화를 적용해보기로 했다. 암호화를 위해서 사용한 라이브러리는 crypto-js
라는 라이브러리이다. 꽤 유명하기도 하고 사실 대체할 만한 다른 라이브러리나 기능이 있는지 잘 모르겠다.
어쨌든 해당 라이브러리를 설치하고 적용해보려고 했는데 몇 가지 문제점이 발생했다. 바로 멍청하게도 AES를 적용했다는 것이다. 이렇게 적용할 경우 암호화를 할때마다 키가 달라지고 동일한 대칭키로 백엔드에서 암호를 해독한 후 저장하는 로직이 필요한데, 이번 API에서는 해당하는 기능을 지원하지 않으므로 이런식으로 구현하면 안됐었다.
const encrypted = CryptoJS.AES.encrypt(
JSON.stringify(formData.password),
VITE_CRYPTO_KEY
).toString();
const bytes = JSON.parse(
CryptoJS.AES.decrypt(encrypted, VITE_CRYPTO_KEY).toString(
CryptoJS.enc.Utf8
)
);
따라서 암호화 방식을 단방향 방식 중에서 SHA-256 암호화 방식을 통해서 저장하는 방식으로 변경했다.
const hash = SHA256(formData.password).toString();
console.log(hash);
이렇게 암호화를 했을 때의 장점은, 비록 만약 우리 사이트에서의 암호가 유출되거나 해도, 사용자의 실제 암호를 알 수 없기에 복호화하여 사용하는 것이 거의 불가능하다.
목표했던 일들을 많이 못하긴 했지만 잘 쉬었던 하루이다. 그래도 회원 가입 페이지 PR은 날렸으니... 만족
TIL 작성 소요 시간 약 10분