Qt中openssl配置,提示OPENSSL_Applink错误(程序异常退出错误)

 
 
首先在QTcreater创建的QT工程中配置静态库和头文件。
1
LIBS += -L"E:\OpenSSL-Win32\lib" -llibcrypto


LIBS += -L"E:\OpenSSL-Win32\lib" -llibssl


INCLUDEPATH += $$quote(E:\OpenSSL-Win32\include)


2、openssl的bin目录下把libcrypto-1_1.dll和msvcr120.dll复制到工程目录下,就是拷到build后生成的文件夹比如(debug和release文件夹下),如果不复制,构建时QT会提示程序异常退出。
3、OK,开始运行项目报错:
            OPENSSL_Uplink(6B437000,08): no OPENSSL_Applink
这个错呢,百度上一搜就有答案了,就是添加一个头文件
             #include "applink.c" 
BUT,我的openssl的include里没有applink.c文件,经过一番寻找后,终于在某篇博客中看到:
1.1的版本在include/openssl的目录下没有applink.c
我的解决办法:直接去1.0.2那个版本下把applink.c拷贝到你QT工程所在的目录下,然后在工程中添加现有文件把applink.c添加到工程中。
注意:
如果在添加到工程中后,在代码内再加上头文件#include "applink.c",就又会报指针赋值错误,如果不添加这个头文件,直接构建,运行就都过了。


完美运行,最后附上我的两个加密解密函数,使用之前记得先创建秘钥,具体操作百度很详细。


(data是需要加密/解密的数据,第二个参数是秘钥的路径)
char *data_encrypy(char *data, char *PUB_KEY)
{
    //对数据进行加密函数
    char *encry_data;
    RSA *p_rsa;
    FILE *file;
    int data_len, rsa_len;
 
 
 
 
    if ((file = fopen(PUB_KEY, "r")) == NULL)
        return NULL;
 
 
 
 
    if ((p_rsa = PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL)) == NULL)
        return NULL;
 
 
 
 
    data_len = strlen(data);
    rsa_len = RSA_size(p_rsa);
    encry_data = (char *)malloc(rsa_len+1);
    memset(encry_data, 0, rsa_len+1);
 
 
 
 
    if (RSA_public_encrypt(rsa_len, (unsigned char *)data,
                           (unsigned char *)encry_data, p_rsa, RSA_NO_PADDING)<</span>0)
        return NULL;
 
 
 
 
    RSA_free(p_rsa);
    fclose(file);
    return encry_data;
}
 
 
 
 
char *data_decrypy(char *data, char *SSL_KEY)
{
    //对数据进行解密函数
    char *decry_data;
    RSA *p_rsa;
    FILE *file;
    int rsa_len;
 
 
 
 
    if ((file = fopen(SSL_KEY, "r")) == NULL)
        return NULL;
 
 
 
 
    if ((p_rsa = PEM_read_RSAPrivateKey(file,NULL,NULL,NULL)) == NULL)
        return NULL;
 
 
 
 
    rsa_len = RSA_size(p_rsa);
    decry_data = (char *)malloc(rsa_len+1);
    memset(decry_data, 0, rsa_len+1);
 
 
    if (RSA_private_decrypt(rsa_len, (unsigned char *)data, (unsigned char *)decry_data,
                            p_rsa, RSA_NO_PADDING) <</span> 0)
        return NULL;
    RSA_free(p_rsa);
    fclose(file);
    return decry_data;
}
 
 
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值