我有程序通过 Diffie-Helman 算法交换会话密钥,或者几乎交换。所有动作都是2类:一类接收数据并计算私钥,设置为第二类,其中对称密钥是在接收到DH的公共部分后计算的。程序正在使用 Qt 和 QCA。私钥存储为小部件类成员:
QCA::DHPrivateKey m_localKey;
在接收到另一方密钥的公共部分(如 QByteArray)后,它会计算对称密钥:
QCA::Initializer init;
QCA::DLGroup group(prime, p);
QCA::SecureArray remoteKey(m_remoteKey);
QCA::DHPublicKey pk(group, remoteKey);
m_sessionKey = m_localKey.deriveKey(pk);
但会话密钥始终为空(m_sessionKey.isEmpty() 和 m_sessionKey.isNull() 为真)。值已设置且交换正确(按原样接收远程部分公钥),m_localKey.isNull() 和 pk.isNull() 返回正确的值 (false)。
奇怪的是,当我运行测试时,它可以工作。测试使用相同的顺序操作,只是在一个类中创建了私钥,但获取对称密钥的逻辑是相同的,用于此的类是相同的。
我的问题是为什么它在测试和单独的程序中表现不同。是否有可能从 QCA::DHPrivateKey 获取任何关于deriveKey() 中出了什么问题的错误/调试信息?