목차
- SHA256이란?
- 이전 빌드 환경 구성 포스팅
- C Openssl SHA256 컨텍스트 생성 예제
- C Openssl SHA256 해시 예제
- C Openssl 문자열 입력받아 실시간 SHA256 해시 예제
- C Openssl 파일 SHA256 해시 예제
- MD5, SHA1, SHA256 차이점
1. SHA256이란?
SHA256(Secure Hash Algorithm 256-bit)은 데이터 무결성을 확인하기 위해 사용되는 해시 함수로, 임의의 길이의 데이터를 입력받아 256비트의 고정된 길이 해시 값을 출력하는 알고리즘입니다.
데이터의 무결성을 보장하는 데에 주로 사용됩니다.
2. 이전 빌드 환경 구성 포스팅
이전에 OpenSSL 라이브러리를 정적 또는 동적으로 빌드하는 방법과 개발 환경을 구성하는 방법에 대한 포스팅입니다.
2023.07.28 - [C] - [C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
3. C Openssl SHA256 컨텍스트 생성 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 SHA256 컨텍스트를 생성하는 방법을 설명합니다.
#include <openssl/sha.h>
int main() {
SHA256_CTX sha256_ctx;
SHA256_Init(&sha256_ctx);
// SHA256 컨텍스트를 초기화하고 데이터를 입력하기 위한 준비
// 필요한 경우 SHA256_Update 함수로 데이터를 추가로 입력할 수 있음
printf("초기화 성공\n");
return 0;
}
4. C Opensl SHA256 해시 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 SHA256 해시를 계산하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/sha.h>
int main() {
char data[] = "Hello, SHA256!";
unsigned char sha256_hash[SHA256_DIGEST_LENGTH];
SHA256(data, sizeof(data) - 1, sha256_hash);
printf("SHA256 해시 결과: ");
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", sha256_hash[i]);
}
printf("\n");
return 0;
}
5. C Openssl 문자열 입력받아 실시간 SHA256 해시 예제
이 예제에서는 C 프로그램에서 문자열을 입력받아 OpenSSL 라이브러리를 사용하여 SHA256 해시를 계산하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/sha.h>
int main() {
char input_string[100];
printf("문자열을 입력하세요: ");
fgets(input_string, sizeof(input_string), stdin);
unsigned char sha256_hash[SHA256_DIGEST_LENGTH];
SHA256(input_string, strlen(input_string) - 1, sha256_hash);
printf("SHA256 해시 결과: ");
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", sha256_hash[i]);
}
printf("\n");
return 0;
}
6. C Openssl 파일 SHA256 해시 예제
이 예제에서는 C 프로그램에서 파일을 읽어와 OpenSSL 라이브러리를 활용하여 SHA256 해시를 계산하는 방법을 설명합니다.
본 예제에서 사용되는 test_text1.txt 파일은 아래 포스팅에서 확인하시면 됩니다.
2023.07.28 - [C] - [C/C++] C언어 Openssl 활용 MD5 해시 예제(문자열, 파일해시)
#include <stdio.h>
#include <openssl/sha.h>
int main() {
const char* filename = "/tmp/test_text1.txt";
FILE* file = fopen(filename, "rb");
if (!file) {
printf("파일을 열 수 없습니다.\n");
return 1;
}
SHA256_CTX sha256_ctx;
SHA256_Init(&sha256_ctx);
unsigned char buffer[1024];
size_t bytes_read;
while ((bytes_read = fread(buffer, 1, sizeof(buffer), file)) != 0) {
SHA256_Update(&sha256_ctx, buffer, bytes_read);
}
unsigned char sha256_hash[SHA256_DIGEST_LENGTH];
SHA256_Final(sha256_hash, &sha256_ctx);
fclose(file);
printf("파일 %s의 SHA256 해시 결과: ", filename);
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
printf("%02x", sha256_hash[i]);
}
printf("\n");
return 0;
}
7. MD5, SHA1, SHA256 차이점
MD5, SHA1, SHA256은 모두 해시 함수이지만 해시 길이와 보안 수준에 차이가 있습니다. MD5는 128비트, SHA1은 160비트, SHA256은 256비트의 해시 값을 생성합니다.
MD5와 SHA1은 현재 안전한 해시 알고리즘이 아니며 보안적으로 취약점이 발견되었습니다.
따라서 보안 요구사항이 있는 경우에는 SHA256을 사용하는 것이 좋습니다.