2013-11-15 101 views
0

我想在我的磁盤上存儲密碼(無散列)。它沒有什麼敏感,但我不想在我的磁盤上使用純文本。 我到現在爲止所嘗試的是: 將二進制字符串轉換爲二進制,並將其與二進制關鍵字進行異或運算。在qt中混淆密碼

bool ok = true; 

QByteArray qbaPW("mypass"); 

long long intPW = qbaPW.toHex().toLongLong(&ok, 16); 

QString binPW = QString::number(intPW, 2); 

但事情是,它只適用於短密碼。如果它們太長,intPW會變得太長以至於太長。任何想法如何能避免那件事?

歡呼

+1

不要使用'long long',堅持'QByteArray'並循環直到結束。 – RobbieE

+3

如果它不是太敏感,你不介意一個特別精明的人破解你的系統,你可以使用標準的'QByteArray :: toBase64()' – RobbieE

+0

你能給我一個提示,我如何得到這個詞的二進制請問一個QByteArray?我卡住了: -/ – Testerrrr

回答

0

一個QByteArray就像一個char array[len]在C.您可以訪問個人會員,做任何你與他們討好。例如:

QByteArray const key("mykey"); 
QByteArray password("password"); 

for (int ik = 0, ip = 0; 
    ip < password.length(); 
    ++ ip, ik = (ik+1 < key.length() ? ik+1 : 0)) { 
    password[ip] = password[ip]^key[ik]; 
} 

由於這只是與密鑰異或,因此您重複此過程以解密密碼。一個好的密鑰會隨機生成,並且會比您想象的最長的密碼(比如64個字符)長。

請注意,如果用戶明確告知不要在您的應用程序中重複使用任何其他密碼,那麼此方法是合理安全的 - 否則您基本上泄漏了應該是安全的密碼。