51

テキストボックスに入力したテキストをC#でセキュアストリングに変換したい。

4

7 に答える 7

87

最も簡単な方法は、次のように、ソース文字列を繰り返し処理し、一度に 1 文字ずつセキュリティで保護された文字列に追加することです。

var secure = new SecureString();
foreach (char c in textbox1.Text)
{
    secure.AppendChar(c);
}
于 2012-03-27T10:50:35.473 に答える
34

一度発明すれば、たくさん再利用できます。文字列基本クラスを拡張する単純な拡張メソッドを作成し、静的ユーティリティ クラスをどこかに格納します。

using System.Security;

/// <summary>
/// Returns a Secure string from the source string
/// </summary>
/// <param name="Source"></param>
/// <returns></returns>
public static SecureString ToSecureString(this string source)
{
    if (string.IsNullOrWhiteSpace(source))
        return null;
    else
    {
        SecureString result = new SecureString();
        foreach (char c in source.ToCharArray())
            result.AppendChar(c);
        return result;
    }
}

そして、次のように呼び出します。

textbox1.Text.ToSecureString();
于 2013-07-10T00:32:46.743 に答える
18

SecureString を読み取り専用にする必要があります。したがって、コードは次のようになります。

static class SecureStringExtensions
{
    public static string ToUnsecureString(this SecureString secureString)
    {
        if (secureString == null) throw new ArgumentNullException("secureString");

        var unmanagedString = IntPtr.Zero;
        try
        {
            unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secureString);
            return Marshal.PtrToStringUni(unmanagedString);
        }
        finally
        {
            Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
        }
    }

    public static SecureString ToSecureString(this string unsecureString)
    {
        if (unsecureString == null) throw new ArgumentNullException("unsecureString");

        return unsecureString.Aggregate(new SecureString(), AppendChar, MakeReadOnly);
    }

    private static SecureString MakeReadOnly(SecureString ss)
    {
        ss.MakeReadOnly();
        return ss;
    }

    private static SecureString AppendChar(SecureString ss, char c)
    {
        ss.AppendChar(c);
        return ss;
    }
}
于 2015-07-18T13:52:11.763 に答える
1

少し遅いかもしれませんが、この方法でも SecureString を String に変換できます

using System.Security;
.
.
.
/// <summary>
/// Converts String to SecureString
/// </summary>
/// <param name="input">Input in String</param>
/// <returns>Input in SecureString</returns>
public SecureString String2SecureString(String input) {
    SecureString _output = new SecureString();
    input.ToCharArray().ToList().ForEach((q) => _output.AppendChar(q));
    return _output;
}

Balazs Tihanyiの答えと同じですが:

Google はあなたの友達です...

var secure = new SecureString(); 
foreach(char c in textbox1.Text) 
{
secure.AppendChar(c); 
}
于 2015-09-28T19:39:53.510 に答える