2012-01-25 15 views
3

私はSecureStringを初期化しようとしており、そのためにChar *が必要です。C#でSecureStringを初期化するためにChar []またはStringをChar *に変換する方法は?

unsafe { 
    char[] c = { 'A', 'B', 'C', 'D' }; 
    char* pointer = &(c[0]); 
    SecureString sec = new SecureString(pointer, 4); 
} 

私はこのエラーを得、これを試してください: は、私は、安全でないコードのブロックでそれを実行しようとしました

Error: You can only take the address of an unfixed expression inside of a fixed statement initializer

答えて

4

なぜだけではなく、各文字をループしAppendCharを使うのか?

string s = "Hello"; 
SecureString ss = new SecureString(); 

foreach(char c in s) ss.AppendChar(c); 
1

これらのコンストラクタは使用しないでください。

これを行う必要があります。

char[] chars = { 'A', 'B', 'C', 'D' }; 
SecureString sec = new SecureString(); 
foreach (var c in chars) { 
    sec.AppendChar(c); 
} 
0

受け入れられた答えによれば、受け入れられる方法はループとAppendCharを使用することです。例えば、次のように私はそれを使用

public static SecureString FromClearString(this SecureString secureString, string clearString) 
{ 
    secureString.Clear(); 
    clearString.ToList().ForEach(secureString.AppendChar); 
    secureString.MakeReadOnly(); 
    return secureString; 
} 

:利便性のために私は、次の拡張メソッドを作成しました

var pwd = new SecureString(); 
await _security.LoginAsync("some.random.user", pwd.FromClearString("the.password"), Cts.Token); 
関連する問題