我必须加密项目的用户vpn密码。它们只存储在本地计算机上,但我想避免硬盘驱动器上的纯文本密码。 我重新加盐并散列用户主密码以在计数器模式下使用XTEA加密vpn密码... 然后我认为也可以在某种计数器模式下使用sha256加密vpn密码。
伪c代码:
string masterpasswd, txtdata;
uint32_t data[] = unicode(txtdata);
uint32_t key[8] = sha256(masterpasswd+salt);
for(int i=0;i<data_size;i++) {
encrypted[i] = data[i] ^ key[i];
key=sha256(key+i);
}
我不想使用openssl,因为我很懒;) 这是一个聪明的解决方案吗?
答案 0 :(得分:3)
不 - 如果您的数据大于您的密钥,对于密码为“正确马匹电池主食”的用户会发生什么?
要么
或
更严重的是,不要这样做。您应该使用PBKDF2(对于OpenSSL,即带有EVP_sha512()的PKCS5_PBKDF2_HMAC()作为散列函数 - 您需要evp.h和sha.h)从主密码和salt中获取所需大小的加密密钥,以及然后使用OpenSSL实际使用ecb模式以外的其他方式进行加密。
答案 1 :(得分:-1)
你可以更懒惰,并使用Qt Simple Crypt的现有类:)