簡體   English   中英

使用計數器模式使用SHA256加密數據是否明智?

[英]Is it smart to encrypt data with SHA256 using counter mode?

我必須加密項目的用戶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,因為我很懶;)這是一個明智的解決方案嗎?

否-對於密碼為“正確的電池”的用戶,當您的數據大於密鑰時會發生什么?

  • 您的代碼中斷,因為它嘗試進入8字節密鑰的第9字節

要么

  • 您的實際實現(而不是偽代碼)最終再次環繞到密鑰的字節0,即ECB模式,這是您永遠都不要使用的一種模式(請參閱Adobe ),因為這樣會導致“ passwordpassword”相同的加密輸出兩次,這是一個巨大的提示。

更嚴重的是,不要這樣做。 您應該使用PBKDF2(對於OpenSSL,將PKCS5_PBKDF2_HMAC()與EVP_sha512()作為哈希函數-您將需要evp.h和sha.h)從主密碼和salt派生所需大小的加密密鑰,並且然后使用OpenSSL實際上使用ecb模式以外的方式進行加密。

您甚至可以更加懶惰,並將現有類用於Qt Simple Crypt :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM