Tag: libcrypto

使用openssl库获取x509证书哈希

我目前正在开发一个应用程序,它使用openssl库(libcrypto)生成证书。 现在我必须得到已经存在的证书的哈希值。 当我使用我的终端时,我可以通过使用生成哈希值 openssl x509 -hash -in cert.pem -noout 输出:01da0e2b 这是我的代码,我尝试使用C中的库生成哈希值。 X509 *cert = NULL; FILE *fp = fopen(currentCert.UTF8String, “r”); PEM_read_X509(fp, &cert, NULL, NULL); long hash = X509_subject_name_hash(cert); char *mdString = malloc(sizeof(long)); sprintf(mdString, “%lx”,hash); printf(mdString); 产量:1817886a 但实际上我的输出是不同的。 有谁知道我做错了什么?

从EVP_PKEY密钥对中提取公钥?

我正在使用OpenSSL的高级EVP_*()函数在我的应用程序中实现加密/解密方案,因此我可以轻松切换所使用的实际算法,而无需更改API调用。 我可以相对轻松地创建一个密钥对 : // dumbed down, no error checking for brevity EVP_PKEY * pkey; // can change EVP_PKEY_RSA to something else here EVP_PKEY_CTX * context = EVP_PKEY_CTX_new_id( EVP_PKEY_RSA, NULL ); EVP_PKEY_keygen_init( ctx ); // could set parameters here EVP_PKEY_keygen( context, &pkey ); // … EVP_PKEY_CTX_free( context ); pkey现在拥有一对密钥,即密钥和公钥。 这对事物的秘密方面来说很好,但显然我想只提取公共关键组件以供公共方面使用。 我能够找到特定于RSA的函数 ,但没有使用高级EVP_*() API。 救命?

在GCC中链接libssl和libcrypto

我正在尝试使用OpenSSL的EVP接口进行一些加密。 我很确定我的代码是正确的,但我似乎无法编译它。 我正在使用GCC,并且安装了libssl-dev的Ubuntu 32位精确版和最新版本。 该项目目前包含一个文件program.c 。 #include … i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1() … ); … EVP_CIPHER_CTX_init(e_ctx); 以及其他各种电话。 这是我如何调用gcc: gcc -Wall -g -lssl -lcrypto -o program program.c 然后我得到这样的输出 /home/andy/program/program.c:31: undefined reference to `EVP_sha1′ /home/andy/program/program.c:31: undefined reference to `EVP_aes_256_cbc’ /home/andy/program/program.c:31: undefined reference to `EVP_BytesToKey’ /home/andy/program/program.c:44: undefined reference to `EVP_CIPHER_CTX_init’ 所以包含显然在起作用: andy@ProgStation2:/usr/include$ find . | grep evp.h ./openssl/evp.h […]