EVP(Encryption and Decryption) 是 OpenSSL 库中的一个高级加密接口,它提供了一组统一的 API 来处理各种加密算法,包括对称加密、非对称加密和哈希函数。SHA1(Secure Hash Algorithm 1) 是一种广泛使用的哈希函数,用于生成数据的固定长度摘要。
类型:
应用场景:
以下是一个使用 OpenSSL EVP 接口进行 SHA1 哈希计算的示例代码:
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>
void compute_sha1(const unsigned char *input, size_t input_len, unsigned char *output) {
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
if (!ctx) {
fprintf(stderr, "Failed to create EVP_MD_CTX\n");
return;
}
if (EVP_DigestInit_ex(ctx, EVP_sha1(), NULL) != 1) {
fprintf(stderr, "Failed to initialize digest context\n");
EVP_MD_CTX_free(ctx);
return;
}
if (EVP_DigestUpdate(ctx, input, input_len) != 1) {
fprintf(stderr, "Failed to update digest context\n");
EVP_MD_CTX_free(ctx);
return;
}
unsigned int digest_len;
if (EVP_DigestFinal_ex(ctx, output, &digest_len) != 1) {
fprintf(stderr, "Failed to finalize digest context\n");
EVP_MD_CTX_free(ctx);
return;
}
EVP_MD_CTX_free(ctx);
}
int main() {
const char *data = "Hello, World!";
unsigned char hash[SHA_DIGEST_LENGTH];
compute_sha1((unsigned char *)data, strlen(data), hash);
printf("SHA1 of '%s' is: ", data);
for (int i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02x", hash[i]);
}
printf("\n");
return 0;
}
问题:计算出的 SHA1 哈希值不正确。
原因:
解决方法:
通过以上步骤,可以有效解决在使用 EVP SHA1 过程中遇到的问题。