我得到错误未定义的引用`PKCS5_PBKDF2_HMAC_SHA1'。我如何解决它?

时间:2014-12-18 02:31:22

标签: c gcc openssl

当我尝试编译下面的代码时,我收到此错误。我安装了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);
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

  

我得到错误未定义的引用`PKCS5_PBKDF2_HMAC_SHA1&#39;。我该如何解决?

1.0.0(IIRC)中添加了

PKCS5_PBKDF2_HMAC_SHA1。所以一定要使用OpenSSL 1.0.0或更高版本。这是PKCS5_PBKDF2_HMAC_SHA1上的OpenSSL手册页,但它的历史记录为空。

如果您使用的是OpenSSL 1.0.1,请确保包含libcrypto链接器。您的编译/链接命令应如下所示:

gcc wa_pbkdf2.c -o wa_pbkdf2.exe -lcrypto