0

我想在我的磁盘上存储一个密码(无哈希)。它没有什么敏感的,但我只是不希望它在我的磁盘上以纯文本形式出现。到目前为止我尝试的是:将字符串转换为二进制并与密钥的二进制进行异或。

bool ok = true;

QByteArray qbaPW("mypass");

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

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

但问题是,它只适用于短密码。如果它们太长 intPW 对于 longlong 来说太大了。任何想法如何避免那件事?

干杯

4

1 回答 1

0

AQByteArray就像char array[len]C 中的 a。您可以访问各个成员并对他们做任何您想做的事情。例如:

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 个字符)长。

请注意,只有当明确告知用户不要在您的应用程序中重用任何其他密码时,此方法才相当安全- 否则您实际上是在泄漏本应安全的密码。

于 2013-11-15T15:41:57.050 回答