首頁 > 後端開發 > C++ > 主體

如何使用 OpenSSL 和 C 產生 SHA256 雜湊值:缺失函數的解決方案?

Susan Sarandon
發布: 2024-10-26 18:39:30
原創
366 人瀏覽過

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

使用OpenSSL 和C 產生SHA256 雜湊

當負責使用SHA256 與OpenSSL 和C 建立雜湊時,了解庫的功能變得至關重要。其中一個實例遇到了缺少 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!