c++ - 使用 GPGME 加密灵活的数据量

标签 c++ encryption gpgme

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

    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 作为读取缓冲区中加密数据的限制。有没有办法提前确定我的加密数据结果多长时间(给定明文)?还是我必须接受静态限制?

最佳答案

我不熟悉这个特定的 API,但是 gpgme_data_seekgpgme_data_read 调用看起来它们可能表现得像 read()seek() 来自文件 I/O 系统。

(1) 尽可能多地分配缓冲区(假设为 N)。

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

(3) 检查错误条件(我猜是n<0)

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

关于c++ - 使用 GPGME 加密灵活的数据量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946861/

相关文章:

C++ 自定义 pinentry 包装器

c++ - GPGME : Invalid crypto engine

c - 如何抑制来自 gpgme 的 valgrind 警告?

c++ - 显示前测试 QToolTip 是否被遮挡

encryption - 使用初始化向量和填充正确实现 AES 128 加密

sql-server - 为什么当SQL Server设置为强制加密时,SSMS允许登录,而SSMS登录选项中没有选择 'encrypt connection'选项

android - 如何解密android中的SQLCipher加密文件?

c++ - 多态类型的 typeid

c++ - 在哪里可以获得有关 Visual Studio 中 C/C++ 链接器的信息?

c++ - 一元减运算符应用于无符号类型