0

我目前正在编写一个 C++ 应用程序,并希望使用 GPGME 进行消息签名、加密和密钥管理。我知道我可以用这种方式加密数据:

    err = gpgme_op_encrypt(mContext, recipients,...);
    if(err) {
        // .. error handling
    }
    result = gpgme_op_encrypt_result(mContext);
    if(result->invalid_recipients){
        //error handling
    }

    nbytes = gpgme_data_seek(encrypted_text, 0, SEEK_SET);
    if(nbytes == -1) {
       //error handling         
    }  
    buffer = malloc(MAXLEN);
    nbytes = gpgme_data_read(encrypted_text, buffer, MAXLEN);

但是正如人们所看到的,我必须使用 MAXLEN 作为读取缓冲区中加密数据的限制。有没有办法确定我的加密数据结果会提前多长时间(给定明文)?还是我必须接受静态限制?

4

1 回答 1

1

我不熟悉这个特定的 API,但是gpgme_data_seekandgpgme_data_read调用看起来它们的行为可能类似于read()文件seek()I/O 系统。

(1) 只需分配尽可能多的缓冲区(比如说 N)。

(2) 调用n=gpgme_data_read(...,N)直到N!=n

(3) 检查错误情况(我的猜测是 n<0)

继续,直到您处理完所有您感兴趣的数据。

于 2016-01-22T14:21:57.323 回答