调用gcry_cipher_close时如何防止gcrypt清除纯文本和加密文本?

时间:2018-08-24 01:03:47

标签: c gnupg libgcrypt

根据official documentation,使用gcrypt进行加密时,最终调用private PublishSubject<String> subject; public CustomDialog(@NonNull Context context, PublishSubject<String> subject) { super(context); this.subject = subject; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_dialog); findViewById(R.id.button).setOnClickListener(this); } @Override public void onClick(View v) { subject.onNext("Data"); dismiss(); } 时,它将所有数据清零(包括纯文本和加密文本)。

我已经阅读了一些示例源代码 Jin-Yang/examples ,它只使用gcry_cipher_close将结果输出到stdout。

但是,当我需要在类似printf的函数中抽象此作业时,显然有必要在调用encrypt_data(unsigned char *encrypt_txt, int *crylen, const unsigned char* plain_txt, const int plnlen, const char *key, int keylen) {...}函数之后保留这些数据。

我曾经尝试在此函数结束时不调用gcry_cipher_close。但是,我认为这不是内存安全且美观的代码。

我还尝试过将纯文本,加密文本和密钥文本都存储到临时变量中。但是,它的执行速度较慢,而且过于冗长。

是否有一种标准的(安全,美观且易于理解的)实施方式?(此问题与对称加密有关,但也欢迎对非对称示例进行回答)。

0 个答案:

没有答案