最后我要问 libgcrypt 开发人员。以下是 Werner Koch 的回答,我想以这种方式感谢他。我希望这会对其他人有所帮助。
==================================================== =================
如果您尝试使用弱密钥进行常规加密,并且 DES 模块内部的错误检查会阻止您实际执行此操作,则没有记录的方法可以使用它。弱密钥是永远不应该发生的事情。
但是,您可以使用私有控制代码来禁用弱键检测。我们在回归测试中使用它。但请注意,这是未记录的私有功能,它可能适用于也可能不适用于未来版本的 Libgcrypt。这是一段代码摘录:
#define PRIV_CTL_DISABLE_WEAK_KEY 61
err = gcry_cipher_open (&hd, cipher_algo, cipher_mode, 0);
if (err)
die ("gcry_cipher_open failed for algo %d, mode %d: %s\n",
cipher_algo, cipher_mode, gpg_strerror (err));
gcry_cipher_ctl (hd, PRIV_CTL_DISABLE_WEAK_KEY, NULL, 0);
==================================================== =================
编辑
现在在最新的 libgcrypt 版本中禁止禁用弱键警告,因此上述内容不再有意义。我们通过在 boost 流中捕获 stderr 并在将其提供到日志之前将其过滤掉来解决此问题。