首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密EVP envelope_open()的奇怪行为

解密EVP envelope_open()的奇怪行为
EN

Stack Overflow用户
提问于 2022-11-26 21:12:39
回答 1查看 57关注 0票数 0

我有一个简单的程序来加密目录中的文件。我可以反复迭代,一切都很完美。这是使用pub/priv密钥对。一次解密一个文件时,它的工作原理是正确的。但是,如果一个目录中有多个文件,或者即使我将文件名放在一个向量中,并将它们分别用于读/写,它只会解密向量/目录中的最后一个文件。这怎么可能?它在OpenFinal()上对每个人都失败了。这是程序的功能和核心。其他一切都是坚实的。如前所述,如果我只是手动解密一个文件,或者如果目录或向量中只有一个文件,它作为一个独立的程序工作。

任何帮助都将不胜感激。这完全没有意义。这似乎是他们的一个实现问题。

代码语言:javascript
复制
void handleErrors(void)
{
    // perror("Error: ");
    ERR_print_errors_fp(stderr);
    abort();
}


int envelope_open(EVP_PKEY *priv_key, unsigned char *ciphertext,
                  int ciphertext_len, unsigned char *encrypted_key,
                  int encrypted_key_len, unsigned char *iv,
                  unsigned char **plaintext, int *plaintext_len)
{
    EVP_CIPHER_CTX *ctx;
    int len = 0, ret = 0;
    unsigned char *tmpptxt = NULL;

    if((ctx = EVP_CIPHER_CTX_new()) == NULL)
        return 0;

    if ((tmpptxt = (unsigned char*)malloc(ciphertext_len)) == NULL)
    {
        printf("tmptxt error!\n");
        handleErrors();
    }

    if(EVP_OpenInit(ctx, EVP_aes_256_cbc(), encrypted_key, encrypted_key_len,
                    iv, priv_key) != 1)
    {
        printf("OpenInit error\n");
        handleErrors();
    }

    if(EVP_OpenUpdate(ctx, tmpptxt, &len, ciphertext, ciphertext_len) != 1)
            {
        printf("OpenUpdate error\n");
        handleErrors();
    }
    *plaintext_len = len;

    if(EVP_OpenFinal(ctx, tmpptxt + len, &len) != 1)
            {
        printf("OpenFinal error\n");
                handleErrors();
    }
    *plaintext_len += len;

    *plaintext = tmpptxt;
    tmpptxt = NULL;
    ret = 1;
 err:
    EVP_CIPHER_CTX_free(ctx);
    free(tmpptxt);

    return ret;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-28 21:58:59

我正在覆盖密钥,iv从envelope_seal()返回。我看了一下它是独一无二的。每个文件都必须有这个密钥和iv以及密钥上的私钥和密码,才能解密一个文件。所以这绝对是安全的。当然,直到有人破解AES 256

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74585610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档