2013-11-15 75 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个字符)长。

请注意,如果用户明确告知不要在您的应用程序中重复使用任何其他密码,那么此方法是合理安全的 - 否则您基本上泄漏了应该是安全的密码。