Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何替换字符串中的多个字符进行密码解密_C#_Encryption_Replace_Str Replace_Password Encryption - Fatal编程技术网

C# 如何替换字符串中的多个字符进行密码解密

C# 如何替换字符串中的多个字符进行密码解密,c#,encryption,replace,str-replace,password-encryption,C#,Encryption,Replace,Str Replace,Password Encryption,我想在一个文本框中输入一个加密的密码,然后按下一个按钮,在另一个文本框中输入解密的密码。 加密非常简单,我有一个excel表,其中每个字符都有其等效项。所以基本上我需要将每个字符替换为它的减缩等价物,我不知道这是否有意义 例如: 最简单的方法是什么?这够简单吗 var map = new (char before, char after)[] { ('@', 'p'), ('#', 'a'), (')', 's'), }; var input = "@#))";

我想在一个文本框中输入一个加密的密码,然后按下一个按钮,在另一个文本框中输入解密的密码。 加密非常简单,我有一个excel表,其中每个字符都有其等效项。所以基本上我需要将每个字符替换为它的减缩等价物,我不知道这是否有意义

例如:

最简单的方法是什么?

这够简单吗

var map = new (char before, char after)[]
{
    ('@', 'p'), ('#', 'a'), (')', 's'), 
};

var input = "@#))";

var output = map.Aggregate(input, (a, x) => a.Replace(x.before, x.after));

或更古老的学校:

var output = input;
foreach (var m in map)
{
    output = output.Replace(m.before, m.after);
}

您可以使用字典将“加密”字符映射到“解密”字符:

var repl = new Dictionary<char, char> { {'@', 'p'}, {'#', 'a'}, {')', 's'} };
还是带一个环

var sb = new StringBuilder();
foreach (var c in input)
{
  sb.Append(repl[c]);
}
var output = sb.ToString();

你只是一对一地替换字符。这是对的吗?虽然这是一个很好的学习练习,但在进行实际操作时,您应该避免使用这种类型的算法,并使用经过良好测试和健壮的算法(例如System.Security.Cryptography命名空间)。另一件事,尝试避免将密码存储在数据库中(纯文本或密码),通常不需要(在正常使用情况下,您可以存储密码的散列)通常不起作用,如果
after
值中的一个也出现为
before
value@KlausGütter-这可能是实际的设计。我还使用了数组而不是字典来允许显式设置顺序。
var input = "@#))";
var output = new string(input.Select(c => repl[c]).ToArray());
var sb = new StringBuilder();
foreach (var c in input)
{
  sb.Append(repl[c]);
}
var output = sb.ToString();