【问题标题】:I get the error undefined reference to `PKCS5_PBKDF2_HMAC_SHA1'. How do I fix it?我收到错误未定义对“PKCS5_PBKDF2_HMAC_SHA1”的引用。我如何解决它?
【发布时间】:2014-12-18 02:31:22
【问题描述】:

当我尝试编译以下代码时出现此错误。我安装了 openssl 库。我不懂编程。错误是: “ccS3fmrV.o:wa_pbkdf2.c:(.text+0x1e3): 未定义对‘PKCS5_PBKDF2_HMAC_SHA1’的引用 collect2.exe:错误:ld 返回 1 个退出状态

有人可以帮忙吗?谢谢。

#include <stdio.h>
#include <string.h>
#include <openssl/x509.h>
#include <openssl/evp.h>
#include <openssl/hmac.h>

int main(int argc, char *argv[])
{
	unsigned char pass[1024];      // passphrase read from stdin
	unsigned char salt[1024];      // salt 
	int salt_len;                  // salt length
	int ic;                        // iteration
	unsigned char result[1024];    // result
	FILE *fp_salt;

	if ( argc != 3 ) {
		fprintf(stderr, "usage: %s salt_file iteration < passwd_file > binary_key_file \n", argv[0]);
		exit(1);
	}

	ic = atoi(argv[2]);
  
	fp_salt = fopen(argv[1], "r");
	if(!fp_salt) {
		fprintf(stderr, "error opening salt file: %s\n", argv[1]);
		exit(2);
	}

	salt_len=0;
	int ch;	
	while((ch = fgetc(fp_salt)) != EOF) {		
		salt[salt_len++] = (unsigned char)ch;		
	}	

    fclose(fp_salt);	
   
    fgets(pass, 1024, stdin);
    if ( pass[strlen(pass)-1] == '\n' )
		pass[strlen(pass)-1] = '\0';
  
	PKCS5_PBKDF2_HMAC_SHA1(pass, strlen(pass), salt, salt_len, ic, 16, result);

	fwrite(result, 1, 16, stdout);

	return(0);
}

【问题讨论】:

  • 你用什么命令行来编译这个程序?您可能需要一个 -l 标志来链接相应的库。
  • 感谢您的回复。我用过:gcc -o wa_pbkdf2 wa_pbkdf2.c -lssl

标签: c gcc openssl


【解决方案1】:

我收到错误 undefined reference to `PKCS5_PBKDF2_HMAC_SHA1'。我该如何解决?

PKCS5_PBKDF2_HMAC_SHA1 在 1.0.0 (IIRC) 中添加。所以请确保您使用的是 OpenSSL 1.0.0 或更高版本。 PKCS5_PBKDF2_HMAC_SHA1 上有一个 OpenSSL 手册页,但它的历史记录为空。

如果您使用的是 OpenSSL 1.0.1,请确保您在链接器中包含 libcrypto。您的编译/链接命令应该类似于:

gcc wa_pbkdf2.c -o wa_pbkdf2.exe -lcrypto

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2017-04-26
    • 2019-03-29
    • 2018-01-19
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多