DB에 저장하는 비밀번호의 암호화
HASH 함수
Hash 👉 단방향 암호화 기법으로 복호화가 불가능.
임의의 길이를 갖는 비트열을 입력받아, 정해진 길이의 비트열을 반환하는 함수.
(양방향 암호화 기법으로는 Encryption이 있다.
Encryption은 복호화가 필요한 데이터나 Https처럼 통신(송수신)에 있어 사용될 수 있다.)
SHA-256으로 여러 해시 알고리즘을 통해 암호화 테스트를 해볼 수 있다.
https://emn178.github.io/online-tools/sha256.html
MD5, SHA-1, HAS-180은 사용하면 안 되고, SHA-256, 512가 권장된다. 512가 더 보안이 좋다.
Hash의 한계 👉 동일한 메시지는 동일한 다이제스트(digest) 값을 가진다.
Hash 함수를 통과하기 전의 원본 데이터를 메세지(message)라 부르고, 통과된 이후 데이터를 다이제스트라 한다.
해석된 다이제스트 값을 통해 비밀번호를 찾을 수 있는데 그것을 도와주는 것이 레인보우 테이블.
이 테이블은 그동안 해커들이 여러 값들을 대입해보며 얻은 다이제스트들을 모아놓은 모음집이다.
해시된 값은 항상 고정된 길이의 값으로 나타나기 때문에 다른 입력도 같은 해시된 값으로 나타날 수 있다.
해커가 DB에서 암호화된 비밀번호들을 확보하고,
그에 대한 레인보우 테이블을 갖고 있다면 암호문을 해독할 수 있게 되는 것이다.
SALT 👉 해시함수를 돌리기 전에 임의의 문자열을 덧붙여 Hash 함수의 한계점을 보완해준다.
ASCII에 포함되지 않는 특이한 문자를 써서 salt를 만들기도 한다.
또는 해시함수를 여러번 돌리는 것도 하나의 방법이다.
hashed_pw=bcrypt.hashpw(pw_receive.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
파이썬에서 인코딩을 하면 자료형을 bytes로 바꿔준다.
디코딩은 반대료 bytes를 지정한 형식(UTF-8, ASCII 등)의 str로 바꿔준다.
입력받은 비밀번호 값을 인코딩 해주고, 암호화에 필요한 salt도 생성해준다.
암호화된 bytes 형식의 비밀번호는 str로 DB에 저장되므로 앞에 쓸데없는 b'가 붙기 때문에,
암호화된 비밀번호를 UTF-8로 디코딩해 준 다음 저장한다.
'웹개발 > HTML' 카테고리의 다른 글
HTML 이미지에 링크 걸기 (0) | 2023.03.07 |
---|---|
window location / button onclick (0) | 2023.03.06 |
html _ 클래스(class)와 아이디(id)의 차이 (0) | 2023.03.05 |