gpt4 book ai didi

c# - 循环在构造函数中设置变量

转载 作者:行者123 更新时间:2023-11-30 19:37:31 25 4
gpt4 key购买 nike

我正在尝试将变量 Senha(我的系统密码)设置为原始值的 md5 哈希值。

public class Usuario
{
public int ID { get; set; }
[Required]
public string Nome { get; set; }
[Required]
public string Senha {
get { return Senha; }
set { Console.WriteLine("valor"+value );
this.Senha = CalculateMD5Hash(value); }
}

public static String CalculateMD5Hash(String input) {

// step 1, calculate MD5 hash from input
MD5 md5 = MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
}

但是正在发生的事情是该类进入一个循环并生成原始散列的散列。

例如:值 = 123

value1 = 202CB962AC59075B964B07152D234B70(哈希值)

value2 = D9840773233FA6B19FDE8CAF765402F5(value1 的哈希值)

我怎样才能停止这个循环并只触发一次函数?

最佳答案

您的属性定义不正确。不仅您的 setter 会调用自己,您的 getter 也会调用自己,这将导致堆栈溢出。

相反,您需要提供一个支持字段来存储属性的值:

private string _senha;
public string Senha
{
get { return _senha; }
set
{
Console.WriteLine("valor"+value );
_senha = CalculateMD5Hash(value);
}
}

顺便说一句,既然你特别提到了“密码”这个词,using MD5 for passwords is a bad idea ,所以除非您使用它来访问遗留系统,否则您真的应该这样做 the right way .

关于c# - 循环在构造函数中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802917/

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