>  기사  >  백엔드 개발  >  OpenSSL 및 C를 사용하여 SHA256 해시를 생성하는 방법: 누락된 기능에 대한 솔루션?

OpenSSL 및 C를 사용하여 SHA256 해시를 생성하는 방법: 누락된 기능에 대한 솔루션?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 18:39:30367검색

How to Generate SHA256 Hashes with OpenSSL and C  :  A Solution for Missing Functions?

OpenSSL 및 C를 사용하여 SHA256 해시 생성

OpenSSL 및 C와 함께 SHA256을 사용하여 해시를 생성하는 작업을 수행할 때는 라이브러리의 기능을 이해하는 것이 중요합니다. . 그러한 인스턴스 중 하나에서는 필요한 헤더 파일과 빌드 경로를 포함했음에도 불구하고 OpenSSL 기능이 누락되는 문제가 발생했습니다. 다음 코드 조각은 솔루션을 보여줍니다.

<code class="cpp">void sha256_hash_string(unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65]) {
  int i = 0;
  for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
    sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
  }
  outputBuffer[64] = 0;
}

void sha256_string(char *string, char outputBuffer[65]) {
  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX sha256;
  SHA256_Init(&sha256);
  SHA256_Update(&sha256, string, strlen(string));
  SHA256_Final(hash, &sha256);
  int i = 0;
  for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
    sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
  }
  outputBuffer[64] = 0;
}

int sha256_file(char *path, char outputBuffer[65]) {
  FILE *file = fopen(path, "rb");
  if (!file) return -534;
  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX sha256;
  SHA256_Init(&sha256);
  const int bufSize = 32768;
  unsigned char *buffer = malloc(bufSize);
  int bytesRead = 0;
  if (!buffer) return ENOMEM;
  while ((bytesRead = fread(buffer, 1, bufSize, file))) {
    SHA256_Update(&sha256, buffer, bytesRead);
  }
  SHA256_Final(hash, &sha256);
  sha256_hash_string(hash, outputBuffer);
  fclose(file);
  free(buffer);
  return 0;
}</code>

이 코드를 활용하려면 다음 단계를 따르세요.

<code class="cpp">static unsigned char buffer[65];
sha256("string", buffer);
printf("%s\n", buffer);</code>

이 접근 방식은 OpenSSL 및 C를 사용하여 SHA256 해시를 효과적으로 생성하고 포함 경로를 확인합니다. 이전에 발생한 문제입니다.

위 내용은 OpenSSL 및 C를 사용하여 SHA256 해시를 생성하는 방법: 누락된 기능에 대한 솔루션?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.