2012-10-14 17 views
0

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

回答

0

不幸的是,代碼丟失了,所以無法確定,但問題可能在2個地方 - 傳輸/接收數據和太多的QCA ::初始化器調用。

在設置QCA ::初始化器在main和[re]寫入數據交換代碼之後它就起作用了。 我不知道如何檢查錯誤,如果發生這種情況仍然令人傷心,所以如果有人知道請分享這些知識。