[英]How can i encrypt a stored password that any user could decrypt on use of an application?
我有工作代碼,將加密和解密提供給方法的字符串,這一切都適用於我存儲用戶輸入密碼以方便以后。
但是,我要做的是在應用程序配置文件中提供一個密碼(加密),允許用戶從同一域上的SQL服務器提取數據。
因為我已經將ProtectedData.Protect
與DataProtectionScope.CurrentUser
一起使用,所以使用我作為關鍵加密,意味着用戶無法解密此密鑰,而DataProtectionScope.LocalMachine
也不適用。
private static byte[] Entropy = { // Some arbitrary numbers };
public static string Encrypt(string _toEncrypt)
{
byte[] originalText = Encoding.Unicode.GetBytes(_toEncrypt);
byte[] EncryptedText = ProtectedData.Protect(originalText, Entropy, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(EncryptedText);
}
public static string Decrypt(string _toDecrypt)
{
byte[] EncryptedText = Convert.FromBase64String(_toDecrypt);
byte[] OriginalText = ProtectedData.Unprotect(EncryptedText, Entropy, DataProtectionScope.CurrentUser);
return Encoding.Unicode.GetString(OriginalText);
}
是否有另一種方法可以在需要時解密密碼,並出於安全原因以加密格式提供密碼?
由於您正在為配置文件使用app.config
,因此您實際上可以使用aspnet_regiis
實用程序來加密文件的各個部分。
我已經有一段時間了,但是如果你做一些搜索( 例如 ),互聯網上有一些資源。 但是,如果我沒記錯,步驟基本上是:
app.config
重命名為web.config
因為aspnet_regiis
僅適用於web.config
。 aspnet_regiis -pef <the section you're encrypting> <path to your web.config>
。 該路徑應該只是可以找到配置文件的文件夾,不包括web.config
。 app.config
。 這將需要在托管您的應用程序的服務器或計算機上運行。 如果您的應用程序沒有從單個服務器運行,則事情變得更加復雜,因為您必須導出密鑰,並將其導入到運行該應用程序的每台計算機。 本文包含以下步驟:
- 創建機器級RSA密鑰容器(1個步驟)
- 導出自定義RSA加密密鑰(1個步驟)
- 導入證書(每個機器1個步驟)
- 向證書添加權限(每個機器1個步驟)
- 加密配置部分
- 解密配置部分
您實際上不需要在應用程序中進行任何類型的特殊解密。 配置系統將自動為您處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.