【问题标题】:How to replace string to another string which can back to original using c#如何使用c#将字符串替换为另一个可以恢复原始字符串的字符串
【发布时间】:2018-05-09 16:09:05
【问题描述】:

我想将字符串替换为另一个可以使用 c# 恢复为原始字符串的字符串 例如如果我输入了

“XcXa$2A”

然后单击按钮,输出将是以下字符串:

“t6tYQA*”

那是因为对于我的例子

X replaced by t 
c replaced by 6
a replaced by Y
A replaced by *
$ replaced by Q
2 replaced by A

而且输出字符串可以从另一个按钮返回到原始字符串“t6tYQA*”可以返回到原始“XcXa$2A” 所以我需要将键盘中的所有字符替换为另一个字符,并且输出可以恢复为原始字符。 提前致谢。 我需要它来保护我的所有字符串,并且不需要使用加密和解密。

【问题讨论】:

  • 到目前为止你写了什么代码?
  • “我需要它来保护我所有的字符串” - 请不要因为误解这无论如何都是安全的而工作太久
  • 只需使用SecureString - 不要重新发明轮子。或者使用你的 X-man 密码学技能来对付凡人!

标签: c# asp.net string security encryption


【解决方案1】:

步骤:

  1. 创建一个Dictionary<string, string> dict 对象并将所有映射存储在这里。
  2. 创建获取映射的方法:

    string GetEncryptedData(string s)
    {
       StringBuilder s = new StringBuilder();
       foreach(char c in s.ToCharArray()
       {
          s.Append(dict[c]);
       }
       return s.ToString();
     }
    
  3. 创建一个获取反向映射的方法:

    string GetDecryptedData(string s)
    {
       StringBuilder s = new StringBuilder();
       foreach(char c in s.ToCharArray()
       {
           s.Append(dict.FirstOrDefault(x => x.Value == c).Key;);
       }
       return s.ToString();
     }
    

【讨论】:

  • 字典可读但可能有点重量级;这实际上可以使用 char 数组来完成,因为 char 可以转换为 int,用于数组 index ,例如`map['X'] = 't'; (
  • 感谢您的回答,有没有办法自动填写字典而不是手动填写,因为我不知道所有字符。
  • 假设你在mapping.csv中有所有的映射,然后使用,var dict = File.ReadLines("mapping.csv").Select(line => line.Split(',')).ToDictionary(line => line[0], line => line[1]);
【解决方案2】:

下面的 sn-p 将根据您的需要为您提供加密和解密的等价物。你也可以很容易地解密它。

class Program
        {
            static void Main(string[] args)
            {            
                string input = "sudar";

                string encodedInput = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(input));
                string decodedInput = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(encodedInput));

                Console.WriteLine("Actual text:" + input);
                Console.WriteLine("Encrypted Value: " + encodedInput);
                Console.WriteLine("Decrypted Value: " + decodedInput);

                List<string> encryptedList = new List<string>();

                Console.WriteLine("Encrypted Data:");

                foreach (char c in input.ToCharArray())
                {
                    string encryptedValue = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(c.ToString()));
                    Console.WriteLine(c + " replaced by " + encryptedValue);
                    encryptedList.Add(encryptedValue);
                }

                Console.WriteLine("Decrypted Data:");
                foreach (string s in encryptedList)
                {
                    string decryptedValue = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(s));
                    Console.WriteLine(s + " replaced by " + decryptedValue);
                }

                Console.Read();

            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2019-05-14
    • 2021-05-09
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多