2012-10-05 19 views
1

上午使用QCryptographicHash散列通過並將其保存在一個XML文件中,我的問題是當我使用QDomDocument來讀取和更新我的XML文件中的其他元素元素密碼更改,我不知道如何。QDomDocument和QCryptographicHash問題

任何幫助請!!!

這裏是正確的數據

<?xml version='1.0' encoding='UTF-8'?> 
<Folders> 
<folder DriveL="" Mounted="false" PassW="!Å?L,-;©Óñn?Ãs?N·¦ø" Path="C:\MyProjects\DiskCrypt\testFolder\TestFolder"/> 

,當我需要更新我用QDomDocument來讀取數據並對其進行修改盤符,每一件事情去沒事我的XML文件。我的應用程序加密我的XML文件,如果用戶退出螞蟻解密它,一旦它重新運行,但解密後,我得到這個:

<?xml version='1.0' encoding='UTF-8'?> 
<Folders> 
<folder DriveL="" Mounted="false" PassW="!??L,-;???n??s?N???" Path="C:\MyProjects\DiskCrypt\testFolder\TestFolder"/> 
</Folders> 

所以PassW應該"!Å?L,-;©Óñn?Ãs?N·¦ø"但加密後是"!??L,-;???n??s?N???",我使用encrption簡單的算法和解密(AES 128)。

+1

您可以編輯您的問題以包含您期望的xml結果以及您獲得的結果,以及您用於讀取和寫入xml元素的代碼。 – alexisdm

+2

也許你想要在XML數據中對散列進行十六進制編碼。如果你不這樣做,確保散列數據的完整性會變得很複雜,如果你不對其進行十六進制編碼,它將是二進制的。 'QByteArray :: toHex()'是你的朋友。 – leemes

+0

謝謝你同性戀,我重新測試我的應用程序,問題是我錯過了'toHex()'就像@leemes說的,謝謝你的任何時間。 – Oumaya

回答

1

爲避免出現文本編碼問題,並使XML文件易於閱讀,您絕不應將二進制數據直接放入XML文檔中。改爲使用base64或十六進制編碼。

由於QCryptographicHash以二進制形式生成散列,所以您必須在您從其獲取的字節數組上調用.toHex()。 (Base64也可以,甚至更小,但是哈希的十六進制編碼是「默認」方式,使它們變得易於閱讀)。