ホームページ  >  記事  >  バックエンド開発  >  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 を使用してハッシュを作成するタスクを任された場合、ライブラリの機能を理解することが重要になります。そのようなインスタンスの 1 つでは、必要なヘッダー ファイルとビルド パスが含まれているにもかかわらず、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。