openssl EVP_DecryptFinal_ex 错误 100C

在做chrome cookie Decrypt的功能小工具。

目前遇到问题EVP_DecryptFinal_ex 的时候经常返回值为0。

知道是padding的问题,但是不知道到底该如何处理这个padding。有大神指导一下吗。


#include <iostream>
#include <string>

#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <openssl/hmac.h>
#include <openssl/engine.h>

#include "sqlite3.h"

using namespace std;

const char kSalt[] = "saltysalt";
const int kDerivedKeySizeInBits = 128;
const int kEncryptionIterations = 1003;
const char kEncryptionVersionPrefix[] = "v10";

struct Param {
    string pass;
    string host;
    string key;
};

static std::string &rtrim(std::string &s) {
    s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
    return s;
}

bool deriveKeyFromPassword(const char *password, int pass_len, const unsigned char *salt, int salt_len, unsigned char *out) {
    if(PKCS5_PBKDF2_HMAC_SHA1(password, pass_len, salt, salt_len, kEncryptionIterations, kDerivedKeySizeInBits/8, out) != 0) {
        return true;
    } else {
        cout << "0.PKCS5_PBKDF2_HMAC_SHA1 failed\n";
        return false;
    }
}

int decrypt(const unsigned char *ciphertext, int ciphertext_len, const unsigned char *key, const unsigned char *iv, unsigned char *plaintext) {
    EVP_CIPHER_CTX *ctx;

    int len;
    int plaintext_len = -1;

    if(!(ctx = EVP_CIPHER_CTX_new())) {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) {
        ERR_print_errors_fp(stderr);
        return -1;
    }
    // EVP_CIPHER_CTX_set_padding(ctx, 0);

    if(1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len)) {
        ERR_print_errors_fp(stderr);
        goto CLEARUP;
    }

    plaintext_len = len;
    if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) {
        ERR_print_errors_fp(stderr);
        plaintext_len = -1;
        goto CLEARUP;
    }
    plaintext_len += len;

CLEARUP:
    EVP_CIPHER_CTX_free(ctx);

    return plaintext_len;
}

bool chrome_decrypt(const string& password, const string &enc_value, string *dec_value) {
    if (enc_value.find(kEncryptionVersionPrefix) != 0) {
        cout << "invalid encrypted data\n";
        return false;
    }

    string raw_enc_value = enc_value.substr(strlen(kEncryptionVersionPrefix));

    unsigned char iv[AES_BLOCK_SIZE] = {0};
    memset(iv, ' ', AES_BLOCK_SIZE);

    unsigned char *decryptedtext = new unsigned char[raw_enc_value.size() + 64];
    int decryptedtext_len = 0;
    bool ret = false;

    unsigned char aes_key[kDerivedKeySizeInBits/8] = {0};
    if (deriveKeyFromPassword(password.c_str(), password.size(), (unsigned char *)kSalt, (int)strlen(kSalt), aes_key)) {
        decryptedtext_len = decrypt((const unsigned char *)raw_enc_value.c_str(), raw_enc_value.size(), aes_key, iv, decryptedtext);
        if (decryptedtext_len > 0) {
            *dec_value = string((char *)decryptedtext, decryptedtext_len);
            ret = true;
        }
    }

    delete[] decryptedtext;

    return ret;
}

int db_callback(void* param, int row_count, char** argv, char** col_name) {
    Param* _param = (Param*)param;
    if (!_param->host.empty() && argv[1] != _param->host)
        return 0;

    bool show_detail = _param->key.empty();

    for(int i = 0; i < row_count; i++) {
        if (show_detail) {
            if (i == 12) {
                string value = "";
                chrome_decrypt(_param->pass, argv[i], &value);
                cout << col_name[i] << ": " << rtrim(value) << "\n";
            } else {
                cout << col_name[i] << ": " << argv[i] << "\n";
            }
        } else {
            if (argv[2] == _param->key && i == 12) {
                string value = "";
                chrome_decrypt(_param->pass, argv[i], &value);
                cout << rtrim(value) << value.length() << "\n";
            }
        }
    }
    if (show_detail)
        cout << "--------------------------------------------\n";
    return 0;
}

void read_db(const string& db_path, const string& password, const string& host, const string& key) {
    sqlite3* handle = NULL;
    sqlite3_open(db_path.data(), &handle);

    if (handle == NULL) {
        cout << "打开cookie数据库失败!";
        return;
    }

    sqlite3_stmt* stmp = NULL;

    Param param;
    param.pass = password;
    param.host = host;
    param.key = key;

    char* error = NULL;
    string sql = "select * from cookies";
    sqlite3_exec(handle, sql.data(), db_callback, (void*)(&param), &error);
    sqlite3_close(handle);
}

int main(int argc, const char * argv[]) {
    // read_db("/Users/bitebit/Library/Application Support/Google/Chrome/Default/Cookies", "F3/F95DvICIA==", "", "");
    // read_db("/Users/bitebit/Library/Application Support/Google/Chrome/Default/Cookies", "F3/F95DvICIA==", "10.2.69.69", "");
    // read_db("/Users/bitebit/Library/Application Support/Google/Chrome/Default/Cookies", "F3/F95DvICIA==", "10.2.69.69", "LBCLUSTERID");

    if (argc < 3) {
        cout << "使用方法: \n\t decryptor cookie文件路径 chrome钥匙串 [cookie的host] [cookie的名字]\n" << endl;
        cout << "Mac下获取chrome钥匙串: \n\t security find-generic-password -w -s \"Chrome Safe Storage\"" << endl;
        return 1;
    }

    if (argc == 5)
        read_db(argv[1], argv[2], argv[3], argv[4]);
    else if (argc == 4)
        read_db(argv[1], argv[2], argv[3], "");
    else if (argc == 3)
        read_db(argv[1], argv[2], "", "");

    return 0;
}


1个回答

openssl之EVP系列之4---EVP_Encrypt系列函数详解(一)
---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc部分翻译和自己的理解写成
(作者:DragonKing, Mail: wzhah@263.net ,发布于:http://openssl.126.com 之openssl专业论坛,版本:openssl-0.9.7)
EVP_Cipher系列包含了很多函数,我将他们大概分成两部分来介绍,一部分是基本函数系列,就是本文要介绍的,另一个部分是设置函数系列,将在后面的文章进行介绍。基本系列函数主要是进行基本的加密和解密操作的函数,他们的定义如下(openssl/evp.h):
int EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);

 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 ENGINE *impl, unsigned char *key, unsigned char *iv);
 int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
 int *outl, unsigned char *in, int inl);
 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
 int *outl);

 int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 ENGINE *impl, unsigned char *key, unsigned char *iv);
 int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
 int *outl, unsigned char *in, int inl);
 int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
 int *outl);

 int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 ENGINE *impl, unsigned char *key, unsigned char *iv, int enc);
 int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
 int *outl, unsigned char *in, int inl);
 int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
 int *outl);

 int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 unsigned char *key, unsigned char *iv);
 int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
 int *outl);

 int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 unsigned char *key, unsigned char *iv);
 int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
 int *outl);

 int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 unsigned char *key, unsigned char *iv, int enc);
 int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
 int *outl);

 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
其实在这里列出的函数虽然很多,但是大部分是功能重复的,有的是旧的版本支持的函数,新的版本中已经可以不再使用了。事实上,函数EVP_EncryptInit, EVP_EncryptFinal, EVP_DecryptInit, EVP_CipherInit以及EVP_CipherFinal在新代码中不应该继续使用,他们保留下来只是为了兼容以前的代码。在新的代码中,应该使用EVP_EncryptInit_ex、EVP_EncryptFinal_ex、EVP_DecryptInit_ex、EVP_DecryptFinal_ex、EVP_CipherInit_ex以及EVP_CipherFinal_ex函数,因为它们可以在每次调用完算法后,不用重新释放和分配已有EVP_CIPHER_CTX结构的内存的情况下重用该结构,方便很多。下面我们分别对这些函数进行介绍。
【EVP_CIPHER_CTX_init】
该函数初始化一个EVP_CIPHER_CTX结构体,只有初始化后该结构体才能在下面介绍的函数中使用。操作成功返回1,否则返回0。
【EVP_EncryptInit_ex】
该函数采用ENGINE参数impl的算法来设置并初始化加密结构体。其中,参数ctx必须在调用本函数之前已经进行了初始化。参数type通常通过函数类型来提供参数,如EVP_des_cbc函数的形式,即我们上一章中介绍的对称加密算法的类型。如果参数impl为NULL,那么就会使用缺省的实现算法。参数key是用来加密的对称密钥,iv参数是初始化向量(如果需要的话)。在算法中真正使用的密钥长度和初始化密钥长度是根据算法来决定的。在调用该函数进行初始化的时候,除了参数type之外,所有其它参数可以设置为NULL,留到以后调用其它函数的时候再提供,这时候参数type就设置为NULL就可以了。在缺省的加密参数不合适的时候,可以这样处理。操作成功返回1,否则返回0。
【EVP_EncryptUpdate】
该函数执行对数据的加密。该函数加密从参数in输入的长度为inl的数据,并将加密好的数据写入到参数out里面去。可以通过反复调用该函数来处理一个连续的数据块。写入到out的数据数量是由已经加密的数据的对齐关系决定的,理论上来说,从0到(inl+cipher_block_size-1)的任何一个数字都有可能(单位是字节),所以输出的参数out要有足够的空间存储数据。写入到out中的实际数据长度保存在outl参数中。操作成功返回1,否则返回0。
【EVP_EncryptFinal_ex】
该函数处理最后(Final)的一段数据。在函数在padding功能打开的时候(缺省)才有效,这时候,它将剩余的最后的所有数据进行加密处理。该算法使用标志的块padding方式(AKA PKCS padding)。加密后的数据写入到参数out里面,参数out的长度至少应该能够一个加密块。写入的数据长度信息输入到outl参数里面。该函数调用后,表示所有数据都加密完了,不应该再调用EVP_EncryptUpdate函数。如果没有设置padding功能,那么本函数不会加密任何数据,如果还有剩余的数据,那么就会返回错误信息,也就是说,这时候数据总长度不是块长度的整数倍。操作成功返回1,否则返回0。
PKCS padding标准是这样定义的,在被加密的数据后面加上n个值为n的字节,使得加密后的数据长度为加密块长度的整数倍。无论在什么情况下,都是要加上padding的,也就是说,如果被加密的数据已经是块长度的整数倍,那么这时候n就应该等于块长度。比如,如果块长度是9,要加密的数据长度是11,那么5个值为5的字节就应该增加在数据的后面。
【EVP_DecryptInit_ex, EVP_DecryptUpdate和EVP_DecryptFinal_ex】
这三个函数是上面三个函数相应的解密函数。这些函数的参数要求基本上都跟上面相应的加密函数相同。如果padding功能打开了,EVP_DecryptFinal会检测最后一段数据的格式,如果格式不正确,该函数会返回错误代码。此外,如果打开了padding功能,EVP_DecryptUpdate函数的参数out的长度应该至少为(inl+cipher_block_size)字节;但是,如果加密块的长度为1,则其长度为inl字节就足够了。三个函数都是操作成功返回1,否则返回0。
需要注意的是,虽然在padding功能开启的情况下,解密操作提供了错误检测功能,但是该功能并不能检测输入的数据或密钥是否正确,所以即便一个随机的数据块也可能无错的完成该函数的调用。如果padding功能关闭了,那么当解密数据长度是块长度的整数倍时,操作总是返回成功的结果。
【EVP_CipherInit_ex, EVP_CipherUpdate和EVP_CipherFinal_ex】
事实上,上面介绍的函数都是调用这三个函数实现的,它们是更底层的函数。完成了数据的加密和解密功能。他们根据参数enc决定执行加密还是解密操作,如果enc为1,则加密;如果enc为0,则解密;如果enc是-1,则不改变数据。三个函数都是操作成功返回1,否则返回0。
【EVP_CIPHER_CTX_cleanup】
该函数清除一个EVP_CIPHER_CTX结构中的所有信息并释放该结构占用的所有内存。在使用上述的函数完成一个加密算法过程后应该调用该函数,这样可以避免一些敏感信息遗留在内存造成安全隐犯。操作成功返回1,否则返回0。
【EVP_EncryptInit, EVP_DecryptInit和EVP_CipherInit】
这三个函数的功能分别跟函数EVP_EncryptInit_ex, EVP_DecryptInit_ex和EVP_CipherInit_ex功能相同,只是他们的ctx参数不需要进行初始化,并且使用缺省的算法库。三个函数都是操作成功返回1,否则返回0。
【EVP_EncryptFinal, EVP_DecryptFinal和EVP_CipherFinal】
这三个函数分别跟函数EVP_EncryptFinal_ex, EVP_DecryptFinal_ex以及EVP_CipherFinal_ex函数功能相同,不过,他们的参数ctx会在调用后自动释放。三个函数都是操作成功返回1,否则返回0。
kfbyj
狂风暴雨 你好,那我问下。我要如何获取块长度呢。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
openssl的AES解密算法的EVP_DecryptFinal_ex(&ctx,out+outl,&outltmp);的使用
#includern#includern#includern#includern#includern#pragma comment(lib, "libeay32.lib") rn#define BUFSIZE 128rnvoid tEVP_Encrpyt()rnrn unsigned char key[EVP_MAX_KEY_LENGTH]; //密钥rn unsigned char iv[EVP_MAX_IV_LENGTH]; // 初始化向量rn EVP_CIPHER_CTX ctx; rn //EVP算法上下文rn int outl;rn int outltmp;rn int rv;rn int i;rn unsigned char out[BUFSIZE]; // 输出密文缓冲区rn unsigned char in[BUFSIZE];rn const unsigned char *buffer;rn buffer=(unsigned char *)malloc(sizeof(in));rn memset(in,NULL,sizeof(in));rn memset(out,NULL,sizeof(out));rn //unsigned char *out;rn printf("请输入明文");rn scanf("%s",in);rn //const unsigned char *msg="Hello OpenSSL";rn //设置key 和iv (可采用随机数,也可以由用户输入)rn /*for(i=0;i<24;i++)rn rn key[i]=i;rn */rn printf("请输入密钥:");rn scanf("%s",key);rn for(i=0;i<8;i++)rn rn iv[i]=i;rn rn //初始化密码算法结构体rn EVP_CIPHER_CTX_init(&ctx);rn //设置算法和密钥以及初始化向量rn //rv= EVP_EncryptInit_ex(&ctx,EVP_aes_128_cbc(),NULL,key,iv);rn rv= EVP_DecryptInit_ex(&ctx,EVP_aes_128_cbc(),NULL,key,iv);rn if(rv!=1)rn rn printf("Err\n");rn return ;rn rn //数据加密rn //rv=EVP_EncryptUpdate(&ctx,out,&outl,in,strlen(in));rn rv=EVP_DecryptUpdate(&ctx,out,&outl,in,strlen(in));rn if(rv!=1)rn rn printf("Err\n");rn return;rn rn //结束数据加密,把剩余数据输出rn //rv=EVP_EncryptFinal_ex(&ctx,out+outl,&outltmp);rn rv=EVP_DecryptFinal_ex(&ctx,out+outl,&outltmp);rn if(rv!=1)rn rn printf("Err\n");rn return;rn rn outl=outl+outltmp;rn printf("原文为:%s\n",in);rn //打印输出密文rn printf("密文长度:%d\n密文数据:\n",outl);rn rn for(i=0;i
安装openssl时的错误???????
在运行nmake -f ms\ntdll.mak时出现这样的问题rn:NMAKE : fatal error U1077: “cl” : 返回代码“0x2”. rn:NMAKE : fatal error U1077: “ml” : 返回代码“0x1”. rn我试图用运行ms\do_ms来绕开这个问题还是不行,rn也试图运行ms\do_masm同时下载了masm并将ml.exe放到vc6的bin下rn但这两种方法都不行啊rn那位高手帮忙解决一下啊rn谢谢了!!!!!!!
OpenSSL的错误机制
在我们使用OpenSSL的过程中,可能会遇到函数返回值为0的情况,由于OpenSSL大部分的函数返回值规定1为返回正确,0为错误,因此,我们需要借助OpenSSL的错误处理函数对我们的代码进行进一步的分析,找到错误原因。 OpenSSL使用一个叫做ERR_STATE的结构体来维护其错误信息,其本质上就是一个深度为16单位的环形缓冲区,里面可以存放错误数据、文件、标...
安装openssl错误
su - dbra su root cd /dbra/app/softs/ruby-1.8.6-p114/ext/openssl rm -rf *.o,openssl.so,Makefile ruby extconf.rb --with-openssl-dir=/dbra/app/lib/openssl make make install ossl_asn1.c...
s2005 ACE Openssl 错误
1.lib库已经添加了 属性--连接器--附件依赖项rn2.工具--选项--项目和解决方案--VC++目录 添加好了rnrn但是还是出现了 link错误 求高手指点一下吧rnrn由于内容过长 截取了部分错误,但都是link错误rnrn1>------ 已启动生成: 项目: mpp, 配置: Debug Win32 ------rn1>正在链接...rn1> 正在创建库 Debug/mpp.lib 和对象 Debug/mpp.exprn1>BasicTask.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class ACE_Time_Value & __thiscall ACE_Time_Value::operator+=(long)" (__imp_??YACE_Time_Value@@QAEAAV0@J@Z),该符号在函数 "protected: virtual class ACE_Message_Block * __thiscall CBasicTask::GetMessageA(int)" (?GetMessageA@CBasicTask@@MAEPAVACE_Message_Block@@H@Z) 中被引用rn1>BasicTask.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) long __cdecl ACE_OS::time(long *)" (__imp_?time@ACE_OS@@YAJPAJ@Z),该符号在函数 "protected: virtual class ACE_Message_Block * __thiscall CBasicTask::GetMessageA(int)" (?GetMessageA@CBasicTask@@MAEPAVACE_Message_Block@@H@Z) 中被引用rn1>Log.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) long __cdecl ACE_OS::time(long *)" (__imp_?time@ACE_OS@@YAJPAJ@Z)rn1>BasicTask.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall ACE_Time_Value::ACE_Time_Value(long,long)" (__imp_??0ACE_Time_Value@@QAE@JJ@Z),该符号在函数 "protected: virtual class ACE_Message_Block * __thiscall CBasicTask::GetMessageA(int)" (?GetMessageA@CBasicTask@@MAEPAVACE_Message_Block@@H@Z) 中被引用rn1>GlobalData.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall COCIQuery::Login(void)" (__imp_?Login@COCIQuery@@QAE_NXZ),该符号在函数 "public: static bool __cdecl CGlobalData::Connect(void)" (?Connect@CGlobalData@@SA_NXZ) 中被引用rn1>GlobalData.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall COCIQuery::SetDB(class COCIDatabase *)" (__imp_?SetDB@COCIQuery@@QAEXPAVCOCIDatabase@@@Z),该符号在函数 "public: static bool __cdecl CGlobalData::Connect(void)" (?Connect@CGlobalData@@SA_NXZ) 中被引用rn1>GlobalData.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall COCIQuery::IsLogin(void)" (__imp_?IsLogin@COCIQuery@@QAE_NXZ),该符号在函数 "public: static bool __cdecl CGlobalData::Connect(void)" (?Connect@CGlobalData@@SA_NXZ) 中被引用rn1>GlobalData.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall 1>Debug/mpp.exe : fatal error LNK1120: 28 个无法解析的外部命令rn1>生成日志保存在“file://e:\mrgw\mpp\Debug\BuildLog.htm”rn1>mpp - 30 个错误,0 个警告rn========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
EVP_DecryptFinal_ex调用返回失败,解密数据错误的解决方法
在使用openssl进行数据加解密时,解密数据时偶尔会出现问题,即当数据长度为16的整数倍时会出现解密数据部分不正确的情况。此情况下EVP_DecryptFinal_ex函数调用失败。查阅资料如下: 【EVP_EncryptFinal_ex】 该函数处理最后(Final)的一段数据。在函数在padding功能打开的时候(缺省)才有效,这时候,它将剩余的最后的所有数据进行加密处理。该算法使
openssl BIO_new_connect 执行内存错误
第一次.rnBIO_new_connectrnBIO_do_connectrnBIO_readrnBIO_free_allrnrn第二次rnrnBIO_new_connectrnBIO_do_connect 这个函数不执行..就掉到rnrnBIO_free_all了..rn这是为什么....是不是我少做了什么?rnrn
OpenSSL
本课程主要讲解单点登录在集群开发的作用,以及讲解了https协议的操作特点,同时利用openssl实现了证书签发与https单向、双向认证的实现。nn同时本课程还讲解了CAS的使用,以及各种常用配置,同时讲解了如何将Shiro与CAS进行整合处理,后还与Redis结合实现了数据的缓存操作。官方QQ群:612148723。
openssl
openssl-fips-1.1.2.tar.gz
OPENSSL
一本很好的openssl学习资料
Mac用Pip3安装错误 -- OpenSSL错误
方案一:更改镜像 没有 ~/.pip/pip.conf 时 cd ~/ mkdir .pip touch pip.conf 以下为镜像,将镜像内容写入pip.conf: 阿里云 镜像: [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com 清华大学...
如何解决openssl 连接错误 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
最近在学习ssl,在windows 下面用openssl做测试。 尝试用s_clinet 命令连接服务器测试。rn但是 我这边client端一直返回错误19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN。rn因为只是测试服务器,证书用自签名。该签名不被信任,所以报这个错误,请问如何避免这个错误呢?或者是可以忽略?rn在windows下面遇到这种情况可以加载服务器下发的根证书,添加信任后就可以连接。rn我这边也用root 根证书,但是对于使用openssl函数库,自己写代码做连接的话,如何添加根证书到信任列表呢?rn请高手指点!
vs2012配置openssl出现错误,求解答
在运行“nmake -f ms\ntdll.mak”命令是,出现了三个错误rn1、.crypto\cversion.c<80> : error C2065:"cflags":未申明的标识符rn2、.crypto\cversion.c<80> :warning C4047:"return","const char * "与“int”的间接级不同rn3、NMAKE:fatalerror U1077:""D:\Program Files\Microsoft Uisual Studio 11.0\VC\BIN\c1.EXE ":返回代码“0x2” stop.
win32下安装openssl出现Link错误
环境变量全都设置好了,VC6.0都重装了一遍也选择了注册环境变量,但还是出现下述错误rnwp-mmx.obj : fatal error LNK1103: debugging information corrupt; recompile modulrnernNMAKE : fatal error U1077: 'link' : return code '0x44f'rnStop.rnrnrn真心找不到哪里出问题了,求教!!!多谢各路大神~
[内核源码][编译] 关于openssl/opensslv.h错误的解决方案
sudo apt-get install libssl-dev
百分求助bcb2007下编译openssl错误
我下载了openssl 0.9.6,按照readme上的说明rnrn * Configure for building with Borland Builder:rn > perl Configure BC-32rnrn * Create the appropriate makefilern > ms\do_nasmrnrn * Buildrn > make -f ms\bcb.makrnrnrn进行操作。rn但是在进行build的时候,执行到rnWarning W8019 tmp32\md32_common.h 599: Code has no effect in function MD5_Finalrn n_o_T_a_s_m /Focrypto\md5\asm\m5_win32.obj .\crypto\md5\asm\m5_win32.asmrnrn'n_o_T_a_s_m' 不是内部或外部命令,也不是可运行的程序rn或批处理文件。rnrnrn就报错了,希望指点怎么才能成功编译openssl?
linux下安装python3.6遇到openssl错误
(一)安装python3.6(或者任意3.x.x) 1、下载:https://www.python.org/downloads/release/python-368/ 2、下载好的 Python-3.6.8.tgz 放到linux服务器里解压(路径无所谓,随便放自己记着就行) 解压:tar -xzvf Python-3.6.8.tgz 3、进入解压后的文件夹Python-3.6.8中...
使用openssl时出现结构体未定义错误
在添加 openssl engine公钥方法时,出现结构体未定义错误,本来ossl_typ.h中命名声明了了各种结构体类型,但在使用时确报错说未定义,仔细一看,要使用的类型EVP_PKEY_CTX是存在的,但发现结构体部分为黑色, typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; 也就是说该文件没有看到struct evp_pkey_ctx_st的定义,但仔...
zlib和openssl相关库错误的解决
sudo apt-get install zlib1g-dev. sudo apt-get install libssl-dev .
支付宝rsa,回调验签的openssl错误
这两天在做支付宝的移动支付,rn其中在回调验签这一步卡住了。rn主要是在获取支付宝公钥进行签名验证这一步出错。rnrn验证这一步的代码如下:rn[code=php] //转换为openssl密钥,必须是没有经过pkcs8转换的私钥rn $res = openssl_get_publickey( $pubKey );rnvar_dump(openssl_error_string());rnrn // var_dump(openssl_sign($data, $sign, $res));rnrn $result = (bool)openssl_verify($data, base64_decode($signFromAli), $res);rn rn //释放资源rn openssl_free_key($res);[/code]rn使用 openssl_error_string 打印的错误信息是:rnerror:0906D06C:PEM routines:PEM_read_bio:no start linernrn但是我的公钥证书格式是:rn-----BEGIN PUBLIC KEY-----rnMIG***************************************************************************************9J7rnsUoCrQX7Nmo**********************************************pR/************************65nrnSbs*************************************************************+ernCZ********************QABrn-----END PUBLIC KEY-----rn里面的*是我自己替换的。rnrn求前辈们帮忙想想办法。
用openssl对证书签名的错误
我按照“配置Tomcat 4使用SSL”的方式生成CA及证书,但是在 rn“4.2.2.3 用CA私钥进行自签名 rnopenssl x509 -req -in ca\ca-req.csr -out ca\ca-cert.pem -signkey ca\ca-key.pem -days 365 ”rn时出错,错误信息:rn“Getting CA Private Keyrnca\ca-cert.srl: No such file or directoryrn624:error:02001002:system library:fopen:No such file or directory:tmp32dll\bss_file.c:245:fopen('ca\ca-cert.srl','rb')rn624:error:20074002:BIO routines:FILE_CTRL:system lib:tmp32dll\bss_file.c:247:”
OPENSSL(一)关于OPENSSL的安装
如何安装 OPENSSL,网上可以搜索出很多教程,其实步骤不算复杂。 正常来讲, 流程如下: 1. 安装activePerl,因为OPENSSL源码需要用到perl指令。(http://www.activestate.com/activeperl/downloads) 2. 下载openssl源码。(https://www.openssl.org/source/) 3. 下载MASM,因为
Qt中openssl配置,提示OPENSSL_Applink错误(程序异常退出错误)
首先在QTcreater创建的QT工程中配置静态库和头文件。 1、 LIBS += -L&quot;E:\OpenSSL-Win32\lib&quot; -llibcrypto LIBS += -L&quot;E:\OpenSSL-Win32\lib&quot; -llibssl INCLUDEPATH += $$quote(E:\OpenSSL-Win32\inc...
openssl cookbook(openssl 官方手册)
A Guide to the Most Frequently Used OpenSSL Features and Commands。本书作者是ssllabs的创始人(https://www.ssllabs.com/),这本书是想深入学习ssl证书、加密机制和openssl命令行的最佳书籍。
安装OpenSSL,nginx安装openssl模块
OpenSSL官网下载 https://www.openssl.org/source/ 下载并解压后进入目录 编译安装./config --prefix=/usr/local/openssl可以指定目录,默认是/usr/local/ssl ./config make make install make -t make depend 设置环境变量/etc/profile增加exp...
windows下 开源安全套接字 openssl openssl编译 openssl编程
windows下开源安全套接字 openssl openssl编译windows部分 openssl编程资料 编译部分我编译过,生成的链接库也一并放上了
自带OpenSSL库的Linux系统,源代码安装OpenSSL,调试OpenSSL
通常Linux系统自带OpenSSL,但是其so文件由于没有debug信息,因此无法跟踪内部函数,对于学习 不太方便,需要通过源码重新安装。         我的Linux系统是CentOS7,自带的OpenSSL的版本是1.0.1e。在网上下载了OpenSSL1.0.1f后,通过 如下方法安装 ./config --prefix=/usr/local --open
openssl工具
该工具主要用于通过应用签名获取key hashes值
OpenSSL程序设计
介绍SSL的一篇论文,初学者可以好好的看看
openssl lib
openssl被很多公司和项目使用,对于特殊的操作系统(如嵌入式)对功能要求相对简单,最大的问题就是代码的剪裁工作了。这是我在linux平台下裁剪出来的库,版本为openssl-0.9.8e,包括动态库和静态库,并附带裁剪文档指导和参数配置,可以根据实际项目需要进行更改后自行裁剪。
openssl测试程序
openssl测试程序openssl测试程序openssl测试程序openssl测试程序openssl测试程序openssl测试程序
openssl 库
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包...
openssl源代码
openssl源代码 源代码,许多方法可以参考,加密,解密的aes md5,pkcs7,ras,pkcs12,等等等等,太丰富了,你不会失望的
openssl编程实例
openssl编程实例,仅供个人学习openssl,版权他人所有,如有侵权请告知
openssl动态库
openssl 0.9.8.k 动态库,Win32位、Win64库文件。 libeay32.dll、libeay32.lib、ssleay32.dll和ssleay32.lib
openssl 1.1.0b
openssl源码, 1.1.0b
OpenSSL源代码
openssl-1.0.0s.tar.gz
openssl代码实例
本文档代码中的代码基于openssl1.0.0e编写,全部都在linux上编译和运行通过。能帮助普通的C程序员短时间内掌握PKI开发所必备的技能。
OpenSSL工具
强大的OpenSSL工具,关于使用它来生成RSA密钥对可参见博文:http://blog.csdn.net/bbld_/article/details/38777491
openssl 1.0.0d
基于OpenSSL 最新版本1.0.0d 编译 采用vs2008sp1 编译 所有环境为最新最稳定的环境编译的 包括头文件和静态链接库。不需要DLL,你可以做一层封装,自己封装成dll 没有加入任何无关的代码!
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件