gpt4 book ai didi

c# - 如何在我的应用程序中加密用户设置(例如密码)?

转载 作者:IT王子 更新时间:2023-10-29 04:36:52 24 4
gpt4 key购买 nike

我想为用户提供加密保存个人数据的能力。这可能是微不足道的,或者可能已经有人问过,但我找不到一个易于使用的加密/解密密码的示例。

我真的不需要任何 super 神奇的牢不可破的密码。我只需要难以破解的密码即可。

我看过一些 MSDN 和 SO 问题,但还没有找到可以使用的东西。

最佳答案

David ,我以为your answer很漂亮,但我认为这些作为扩展方法会更漂亮。这将允许这样的语法:

string cypherText;
string clearText;

using (var secureString = "Some string to encrypt".ToSecureString())
{
cypherText = secureString.EncryptString();
}

using (var secureString = cypherText.DecryptString())
{
clearText = secureString.ToInsecureString();
}

这是更新后的代码:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Cryptography;
using System.Text;

public static class SecureIt
{
private static readonly byte[] entropy = Encoding.Unicode.GetBytes("Salt Is Not A Password");

public static string EncryptString(this SecureString input)
{
if (input == null)
{
return null;
}

var encryptedData = ProtectedData.Protect(
Encoding.Unicode.GetBytes(input.ToInsecureString()),
entropy,
DataProtectionScope.CurrentUser);

return Convert.ToBase64String(encryptedData);
}

public static SecureString DecryptString(this string encryptedData)
{
if (encryptedData == null)
{
return null;
}

try
{
var decryptedData = ProtectedData.Unprotect(
Convert.FromBase64String(encryptedData),
entropy,
DataProtectionScope.CurrentUser);

return Encoding.Unicode.GetString(decryptedData).ToSecureString();
}
catch
{
return new SecureString();
}
}

public static SecureString ToSecureString(this IEnumerable<char> input)
{
if (input == null)
{
return null;
}

var secure = new SecureString();

foreach (var c in input)
{
secure.AppendChar(c);
}

secure.MakeReadOnly();
return secure;
}

public static string ToInsecureString(this SecureString input)
{
if (input == null)
{
return null;
}

var ptr = Marshal.SecureStringToBSTR(input);

try
{
return Marshal.PtrToStringBSTR(ptr);
}
finally
{
Marshal.ZeroFreeBSTR(ptr);
}
}
}

关于c# - 如何在我的应用程序中加密用户设置(例如密码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8871337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com