Hash Function
What is Hash?
해시 Hash: 데이터를 고정된 크기로 출력한 값
목적: 암호학적으로 데이터의 무결성을 보장
예) 데이터: apple = 해시 값: 1f3870be274f6c49b3e31a0c6728957f
해시함수 Hash Function: 임의의 길이를 가진 입력 데이터를 고정된 길이의 해시값으로 매핑하는 함수
종류:
SHA-256 (Secure Hash Algorithm 256-bit):
미국 NSA가 설계. 비트코인의 핵심 알고리즘이며, 블록 생성 및 작업 증명(Proof of Work, PoW)에 사용됨
Keccak-256:
SHA-3 표준의 원형으로, 이더리움에서 주로 사용
참고: SHA-3와 Keccak-256은 다르다?
2015년에 SHA-3는 NIST(National Institute of Standards and Technology 미국 국립표준기술연구소)에 의해 표준화됨
SHA-3는 Keccak 기반이지만 표준화 과정에서 약간의 내부 파라미터가 바뀜
이더리움은 표준화 전 버전인 Keccak-256을 사용하고 있어서 SHA-3-256과 완전히 동일하지는 않음
따라서 이더리움의 keccak256() 함수와 SHA-3 라이브러리 함수의 결과값이 다를 수 있음
- SHA-1 출력값: 160bits(40자)
- SHA-256, Keccak-256 출력값: 256bits(64자, 32bytes)
예) SHA-256 알고리즘:
-
데이터 1: abcdefghijklmnopqrstuvwxyzabcefghijklmnopqrstuvwxyz
= 해시 값: cf598f0e6c5cd27c961bd259a7dd5e716d15bb3edab87e7a7c486b811cc6d4e8
-
데이터 2: crypto
= 해시 값: da2f073e06f78938166f247273729dfe465bf7e46105c13ce7cc651047bf0ca4
대소문자 구분, 데이터가 아무리 많아도 데이터를 쪼개고 압축해 고정된 크기의 출력값을 생성한다.
🔐 Node.js에서 SHA-256 해시값 생성하기
아래 코드는 Node.js의 내장 crypto
모듈을 사용하여 문자열 "fire"
의 SHA-256 해시값을 생성하는 예제입니다.
createHash('sha256')
를 통해 SHA-256 알고리즘을 사용하고, .update()
로 입력 데이터를 넣은 뒤 .digest('hex')
로 16진수 형태의 해시값을 출력합니다.
```js const crypto = require(‘crypto’);
function sha256(message) { return crypto.createHash(‘sha256’).update(message).digest(‘hex’); }
const string1 = ‘fire’; const hash1 = sha256(string1); console.log(‘SHA-256 해시:’, hash1);
실행하면 다음과 같이 출력됩니다.
fire의 SHA-256 해시 값: 8d1bb1f9433c58a1b124b7fc10efef1709785fe7cda93cb6d5672e74e3cda217