Openssl init,添加密码和清理问题

时间:2016-10-07 07:37:43

标签: android openssl

我在native中使用openssl来加密或解密我的android数据。我在这个领域很天真。我刚做了一个研究并添加了实施。

https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption

我引用它来使用和修改一下如下:

/* Initialise the library */
    //Add the ciper algorithm.
    EVP_add_cipher(EVP_aes_256_cbc());
    //use the default config.
    OPENSSL_config(NULL);

    EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();

    EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);
    EVP_DecryptUpdate(ctx, t, &outlen, s,  size);
    ...
    EVP_DecryptFinal_ex(ctx, t + tlen, &outlen);
    ...

    EVP_CIPHER_CTX_free(ctx);
    EVP_cleanup();

但问题来了,调用EVP_cleanup会导致java端https打开连接异常。像SSL_CTX_new这样的错误返回NULL。一些讨论提到它不应该被称为EVP_cleanup,它将全局清理表算法。所以我删除了EVP_cleanup。崩溃解决了。

但是当我测试内存使用原生时,调用上述功能的100,200 ......次。每次都会增加本机堆。

我删除了这两行。它仍然可以使用EVP_ases_256_cbc成功加密和解密。

/* Initialise the library */
//Add the ciper algorithm.
//EVP_add_cipher(EVP_aes_256_cbc()); 
//use the default config.
//OPENSSL_config(NULL);

https://wiki.openssl.org/index.php/Library_Initialization#OPENSSL_config

  1. 如何加载ssl并加载所有算法?
  2. 我还测试了用OPENSSL_no_config()替换EVP_cleanup();

    /* Initialise the library */
        //Add the ciper algorithm.
        EVP_add_cipher(EVP_aes_256_cbc());
        //use the default config.
        OPENSSL_config(NULL);
    
        EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
    
        EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);
        EVP_DecryptUpdate(ctx, t, &outlen, s,  size);
        ...
        EVP_DecryptFinal_ex(ctx, t + tlen, &outlen);
        ...
    
        EVP_CIPHER_CTX_free(ctx);
        //unload the config. 
        OPENSSL_no_config();
    

    上面的实现,似乎没有导致本机堆增加。

    我的问题如下:

      
        
    1. 不调用任何初始化,例如

           

      OpenSSL_add_ssl_algorithms或SSL_load_error_strings或   EVP_add_cipher;

           

      什么是默认的ssl添加算法或密码?

    2.   
    3. 何时使用OPENSSL_config?是否有必要在我的情况下使用?

    4.   
    5. 我用OPENSSL_no_config()替换EVP_cleanup的最后一个解决方案是本机堆增加泄漏的可接受解决方案吗?
    6.   

0 个答案:

没有答案