我在讀這個:https ://docs.microsoft.com/en-us/windows/win32/seccrypto/example-c-program-using-cryptprotectdata
我想知道這種方法。這是否僅在行程運行時將其存盤在行程記憶體中?如果是這樣,是否存在 win32 api 提供的持久資料存盤,它是安全的并且不會在檔案系統上創建任何檔案?某種安全的鑰匙串/鍵值存盤?
我的目的是保護一個安全的登錄令牌,我正在撰寫的一個程式可以使用該令牌兩周來讓用戶登錄。我認為這些資料不應該存盤在任何人都可以訪問的檔案中。如果有人發現了該檔案,只要令牌有效,他們就可以竊取該檔案并使用其他人的帳戶登錄。環境變數和 Windows 注冊表也是不可接受的解決方案。這需要用戶無法訪問。
uj5u.com熱心網友回復:
只要您正確加密它,將您的登錄令牌存盤在檔案(或注冊表,我個人更喜歡)中沒有任何問題。的檔案有CryptProtectData這樣說:
通常,只有與加密資料的用戶具有相同登錄憑據的用戶才能解密資料。此外,加密和解密通常必須在同一臺計算機上完成。
所以你已經成功了一半。只有“擁有”令牌的用戶(和機器)才能解密它。
除此之外,還有這個引數:
[在,可選] pOptionalEntropy
指向 DATA_BLOB 結構的指標,該結構包含用于加密資料的密碼或其他附加熵。加密階段使用的[same] DATA_BLOB結構,解密階段也必須使用
所以這應該是只有你的程式知道的東西(GUID 是顯而易見的選擇)。然后,只有該程式可以解密 - 并因此使用 - 令牌。
您可能會在代碼中采取一些步驟來混淆它,例如將其存盤為某種損壞的形式,并且僅在您使用它之前對其進行分解。然后SecureZeroMemory在你完成它時打電話,讓潛在的窺探者的生活更加艱難。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428301.html
