【问题标题】:How to replace multiple char in a string for password decrypt如何替换字符串中的多个字符以进行密码解密
【发布时间】:2020-11-02 11:23:55
【问题描述】:

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

示例:

Conversion Table : 
@ = p
# = a
) = s

Input string : @#))
Output string : pass

最简单的方法是什么?

【问题讨论】:

  • 您只是一对一地替换字符。对吗?
  • 虽然这是一个很好的学习练习,但在实际操作时,您应该避免使用这种类型的算法,并使用经过良好测试且稳健的算法(例如 System.Security.Cryptography 命名空间)。
  • 另外一件事,尽量避免将密码存储在数据库中(明文或加密),通常不需要(在正常使用情况下可以存储密码的哈希)跨度>

标签: c# encryption replace str-replace password-encryption


【解决方案1】:

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

var repl = new Dictionary<char, char> { {'@', 'p'}, {'#', 'a'}, {')', 's'} };

并通过 LINQ 评估它

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();

【讨论】:

    【解决方案2】:

    这够简单吗?

    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);
    }
    

    【讨论】:

    • 如果after 值之一也作为before 值出现,则通常不会工作
    • @KlausGütter - 这可能是实际的设计。我还使用数组而不是字典来允许显式设置顺序。
    最近更新 更多