如何检查QCA私钥没有创建对称密钥的原因

时间:2012-10-14 20:40:11

标签: qt cryptography

我有程序通过Diffie-Helman算法交换会话密钥,或几乎交换。所有操作都是2个类:一个接收数据并计算私钥,将其设置为第二类,其中在接收DH的公共部分后计算symetric密钥。 程序正在使用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()为true)。 设置值并且交换正确(远程部分公钥按原样接收), m_localKey.isNull()和pk.isNull()返回正确的值(false)。

奇怪的是,当我运行测试时,它的工作原理。测试使用相同的顺序操作只需在一个类中创建私钥,但获取对称密钥的逻辑是相同的,并且用于此的类是相同的。

我的问题是为什么它在测试和单独的程序中表现不同。是否可以从QCA :: DHPrivateKey获取有关deriveKey()出错的任何错误/调试信息?

1 个答案:

答案 0 :(得分:0)

可悲的是,代码丢失了,所以无法确定,但问题可能是在2个地方 - 传输/接收数据和太多的QCA :: Initializer调用。

在主要和[重新]写入数据交换代码中设置QCA :: Initializer后,它可以工作。 我仍然很难过,如果发生这种情况,我不知道如何检查错误,所以如果有人知道请分享这些知识。