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