SHA256 해쉬의 사용 예제는 다음과 같다.
#include <openssl/sha.h> unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) { SHA256_CTX c; static unsigned char m[SHA256_DIGEST_LENGTH]; if (md == NULL) md = m; SHA256_Init(&c); SHA256_Update(&c, d, n); SHA256_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); return md; }
출처 : https://github.com/openssl/openssl/blob/master/crypto/sha/sha256.c
해쉬를 할때 위처럼 데이터를 한꺼번에 해쉬하는 방법도 있지만 나눠서 해쉬하는 방법도 있다.
다음 코드처럼 하면 된다.
SHA256_CTX c; unsigned char m[SHA256_DIGEST_LENGTH]; SHA256_Init(&c); SHA256_Update(&c, "1234", 4); SHA256_Update(&c, "12345", 5); SHA256_Update(&c, "1234567", 7); SHA256_Final(md, &c);
SHA256_Update를 여러번 하는 것이다.
이런 코드는 언제 쓰는가? 대용량 파일을 해쉬할 때 유용하다.
대용량 파일을 읽어들이면서 그때 그때마다 해쉬 update를 해주고 마지막에 finalize를 하면 효율적이다.
해쉬함수는 SHA 말고 여럿이 있는데 앞에 SHA256_접두어만 해당 해쉬로 바꿔서 사용하면 된다.
정확한 명칭은 OpenSSL 의 폴더를 뒤적여 보면 알 수 있다.