Je souhaite que le texte saisi dans la zone de texte soit converti en valeur sécurisée en c # Merci de votre réponse.
La méthode la plus simple consiste à parcourir la chaîne source et à ajouter un caractère à la fois à la chaîne sécurisée, comme suit:
var secure = new SecureString();
foreach (char c in textbox1.Text)
{
secure.AppendChar(c);
}
Inventer une fois et réutiliser des lots. Créer une méthode d'extension simple pour étendre la classe de base de chaîne et la stocker quelque part dans une classe d'utilitaires statiques
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;
}
}
puis appelez comme suit:
textbox1.Text.ToSecureString();
Assurez-vous que SecureString est en lecture seule. Le code devrait donc ressembler à ceci:
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;
}
}
C'est peut-être un peu tard mais vous pouvez convertir SecureString en String de cette façon
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;
}
bien que tout comme la réponse de Balazs Tihanyi:
Google est ton ami...
var secure = new SecureString(); foreach(char c in textbox1.Text) { secure.AppendChar(c); }
Presque identique, mais plus court:
SecureString secureString = new SecureString();
textbox1.Text.ToCharArray().ForEach(c => secureString.AppendChar(c));
Je suis supposé que personne ne parlait du constructeur SecureString prenant le pointeur sur char array.
public static SecureString ToSecureString(this string source)
{
char[] charArray = source.ToCharArray();
unsafe
{
fixed (char* chars = charArray)
{
return new SecureString(chars, charArray.Length);
}
}
}
Notez que ce code ne fonctionne qu'avec l'option de compilateur /unsafe
. Pour définir cette option, accédez aux propriétés du projet, à l'onglet Générer et cochez la case Autoriser le code non sécurisé.