我有通過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()中出錯的任何錯誤/調試信息?