根据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
。但是,我认为这不是内存安全且美观的代码。
我还尝试过将纯文本,加密文本和密钥文本都存储到临时变量中。但是,它的执行速度较慢,而且过于冗长。
是否有一种标准的(安全,美观且易于理解的)实施方式?(此问题与对称加密有关,但也欢迎对非对称示例进行回答)。