如何將String
轉換爲SecureString
?將字符串轉換爲SecureString
回答
你不知道。使用SecureString對象的全部原因是爲了避免創建一個字符串對象(該對象被加載到內存中並以明文形式保存直到垃圾收集)。但是,您可以通過追加字符來將字符添加到SecureString中。
var s = new SecureString();
s.AppendChar('d');
s.AppendChar('u');
s.AppendChar('m');
s.AppendChar('b');
s.AppendChar('p');
s.AppendChar('a');
s.AppendChar('s');
s.AppendChar('s');
s.AppendChar('w');
s.AppendChar('d');
我會把它扔到那裏。爲什麼?
你不能只是改變你所有的字符串來保護字符串,突然你的應用程序是「安全的」。安全字符串旨在儘可能長時間保持字符串的加密,並且只在很短的時間內解密,並在對其執行操作後擦除內存。
我會冒險說你可能有一些設計級別的問題需要處理,然後再擔心應用程序字符串的安全問題。向我們提供更多關於您想做什麼的信息,並且我們可能會提供更好的幫助。
我同意斯賓塞(+1),但如果你這樣做是爲了學習或測試pourposes,你可以在字符串中使用foreach,追加每字符使用AppendChar方法SecureString的。
以下方法有助於將字符串轉換爲安全字符串
private SecureString ConvertToSecureString(string password)
{
if (password == null)
throw new ArgumentNullException("password");
var securePassword = new SecureString();
foreach (char c in password)
securePassword.AppendChar(c);
securePassword.MakeReadOnly();
return securePassword;
}
您可以按照:
string password = "test";
SecureString sec_pass = new SecureString();
Array.ForEach(password.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
unsafe
{
fixed(char* psz = password)
return new SecureString(psz, password.Length);
}
這裏是一個廉價的LINQ詭計。
SecureString sec = new SecureString();
string pwd = "abc123"; /* Not Secure! */
pwd.ToCharArray().ToList().ForEach(c => sec.AppendChar(c));
/* and now : seal the deal */
sec.MakeReadOnly();
這個答案是一個練習,可以看到有多少個臨時副本可以在一次生成中生成純文本 – 2016-05-16 20:43:49
如果你想一個string
的一個SecureString
轉換壓縮成LINQ
語句,您可以如下表達出來:
var plain = "The quick brown fox jumps over the lazy dog";
var secure = plain
.ToCharArray()
.Aggregate(new SecureString()
, (s, c) => { s.AppendChar(c); return s; }
, (s) => { s.MakeReadOnly(); return s; }
);
但是,請記住,使用LINQ
不提高這個解決方案的安全性。它遭受與從string
到SecureString
的任何轉換相同的缺陷。只要原始的string
保留在內存中,數據就很脆弱。
話雖這麼說,有什麼上面的語句可以提供在保持共同創建SecureString
的,它與數據初始化終於從修改鎖定它。
沒有花哨LINQ,不能用手將所有的字符,只是簡單明瞭:
var str = "foo";
var sc = new SecureString();
foreach(char c in str) sc.appendChar(c);
甚至很有用,不需要定義變量 – bigworld12 2016-07-22 12:56:00
這裏是一行代碼: 'var sc = new SecureString(); foreach(「foo」中的char c)sc.appendChar(c);' – bigworld12 2016-07-22 12:56:57
也有另一種方式來SecureString
和String
之間的轉換。
1.字符串到SecureString的
SecureString theSecureString = new NetworkCredential("", "myPass").SecurePassword;
2。SecureString的爲String
string theString = new NetworkCredential("", theSecureString).Password;
這裏是link
這是迄今爲止最常用的最佳解決方案! – Dan 2017-04-25 15:31:22
如果你的代碼創建一個帶有你想保護的值的字符串對象,那麼使用'SecureString'沒有意義。 「SecureString」的目標是避免在託管內存中包含字符串,因此檢查該內存的攻擊者可以發現要隱藏的值。由於您正在調用的'NetworkCredential'構造函數需要一個字符串,這不是一種可行的方式......當然,您的代碼是一種轉換SecureString和從SecureString轉換的簡單方法,但使用它可以使您的代碼像使用簡單'string' – 2018-02-04 17:40:41
以下2個擴展應該做的伎倆:
對於
char
陣列public static SecureString ToSecureString(this char[] _self) { SecureString knox = new SecureString(); foreach (char c in _self) { knox.AppendChar(c); } return knox; }
而對於
string
public static SecureString ToSecureString(this string _self) { SecureString knox = new SecureString(); char[] chars = _self.ToCharArray(); foreach (char c in chars) { knox.AppendChar(c); } return knox; }
感謝John Dagg爲AppendChar
建議。
你可以使用這個簡單的腳本
private SecureString SecureStringConverter(string pass)
{
SecureString ret = new SecureString();
foreach (char chr in pass.ToCharArray())
ret.AppendChar(chr);
return ret;
}
這個答案[15個月前發佈](https://stackoverflow.com/a/38326325/11683)。真的沒有必要再發布它。 – GSerg 2017-10-28 06:57:47
一種更簡單的方法,可用於:
# Take password and convert it to a secure string
$mySS = "MyCurrentPassword" | ConvertTo-SecureString -AsPlainText -Force
- 1. 將字符串轉換爲字符串
- 2. 將字符串轉換爲字符串
- 3. 將字符串轉換爲字符串
- 4. 將字符串轉換爲int,int轉換爲字符串
- 5. 將字符串轉換爲「_」
- 6. 將字符串轉換爲
- 7. 將字符串轉換爲?
- 8. 將轉換器映射字符串轉換爲字符串
- 9. 將字符串轉換爲字符ascii
- 10. Java - 將字符串轉換爲字符[]
- 11. C++ - 將字符串轉換爲字符
- 12. 將字符*轉換爲字符串
- 13. 將字符串轉換爲字符
- 14. 將字符串轉換爲const *字符
- 15. 將字符[]轉換爲字符串
- 16. InfixToPostfix將字符轉換爲字符串
- 17. 將字符串轉換爲字符
- 18. 將char字符串轉換爲字符
- 19. 將字符串轉換爲字符
- 20. 將textField轉換爲字符串並將字符串轉換爲textField
- 21. C#app.config SecureString字符串不能重鑄爲SecureString
- 22. MySQL SecureString作爲連接字符串
- 23. 將字符串轉換爲運算符?
- 24. 將JavaScript符號轉換爲字符串?
- 25. 將字符串轉換爲運算符
- 26. 將字符串轉換爲運算符
- 27. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 28. 將字典轉換爲字符串
- 29. Knockout.js將數字轉換爲字符串
- 30. Android:EditTextPreference將字符串轉換爲數字
不要忘記讓它只讀s.MakeReadOnly(); – ysrb 2013-06-18 00:48:08
「組合是'12345'......這是白癡在他的行李上的那種東西!」 – 2017-09-27 23:47:51
我看到的只是'*****' – 2017-11-21 19:48:56