【问题标题】:Encrypt a string in c# [closed]在c#中加密一个字符串[关闭]
【发布时间】:2023-04-01 09:10:01
【问题描述】:

我想加密以下字符串。

Mystring="adhbegadhjmqadguvaadgaegadguvabdh";

string[] varEnclist = {
  "adg", "beh", "cfi", "jmp", "knq", "lor", "svy", "twz", "uxa", "aeg", 
  "bdh", "cdi", "jnp", "kmq", "lmr", "swy", "tvz", "uva", "afg", "bfh",
  "cei", "jop", "koq", "lnr", "sxy", "txa", "uwa", "ajk", "adh", "beg",
  "cfg", "jmq", "knp", "lop", "adi", "bei", "cfh", "hio"};

string[] varDataList = {
  "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", 
  "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "_", "0", 
  "1", "2", "3", "4", "5", "6", "7", "8", "9", "."};

是在Mystring 中找到的varEnclist 中的任何数据意味着我必须用varDataList 替换它。

例如。如果在Mystring 中找到adg 意味着我必须将其替换为 a

我必须这样做。 以下是我的代码,但它不起作用。

public string Encrypt(string Mystring="adhbegadhjmqadguvaadgaegadguvabdh")
{
    string[] varEnclist = {"adg", "beh", "cfi", "jmp", "knq", "lor", "svy", "twz", "uxa", "aeg", "bdh", "cdi", "jnp", "kmq", "lmr", "swy", "tvz", "uva", "afg", "bfh", "cei", "jop", "koq", "lnr", "sxy", "txa", "uwa", "ajk", "adh", "beg", "cfg", "jmq", "knp", "lop", "adi", "bei", "cfh", "hio" };
    string[] varDataList = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "_", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "." };
    string strReplaced = "";


    int i;
    for(i=0; i9            {
        strReplaced = StrValue.Replace(varEnclist [i], varDataList [i]);
    }


    return strReplaced;


}

【问题讨论】:

  • “但它不起作用”是什么意思?发生什么了?你期望会发生什么?
  • 如果你想加密数据,你不应该自己动手——你应该使用 .net 命名空间中现成的经过验证的加密算法。
  • for(i=0; i9 { 的语法无效。应该是for(i=0; i < varEnclist.Length; i++) {
  • @Dmitriy 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
  • 这不是加密,充其量只是混淆。

标签: c# .net


【解决方案1】:

扫描(按3个字母的块),查找(对应的字母)和Concat(最后的字符串):

  using System.Linq;

  ...

  string[] varEnclist = { 
     "adg", "beh", "cfi", "jmp", "knq", "lor", "svy", "twz", "uxa", "aeg",
     "bdh", "cdi", "jnp", "kmq", "lmr", "swy", "tvz", "uva", "afg", "bfh",
     "cei", "jop", "koq", "lnr", "sxy", "txa", "uwa", "ajk", "adh", "beg",
     "cfg", "jmq", "knp", "lop", "adi", "bei", "cfh", "hio" };

  string[] varDataList = { 
     "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
     "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "_", "0",
     "1", "2", "3", "4", "5", "6", "7", "8", "9", "." };

  ...

  string Mystring = "adhbegadhjmqadguvaadgaegadguvabdh";

  string result = string.Concat(Enumerable
    .Range(0, Mystring.Length / 3)
    .Select(index => Mystring.Substring(index * 3, 3))
    .Select(code => varDataList[Array.IndexOf(varEnclist, code)]));

  Console.WriteLine(result); 

结果:

 1214arajark

如果你想加密,你可以使用 same 方法:

 string encrypted = string.Concat(result
   .Select(item => varEnclist[Array.IndexOf(varDataList, item.ToString())]));

 Console.WriteLine(ecnrypted); 

结果:

 adhbegadhjmqadguvaadgaegadguvabdh

【讨论】:

  • 可读吗?
  • @Rainman 是我的。
  • 我确定是的。
【解决方案2】:

尝试类似的方法;

int index = 0;
foreach (var s in varEnclist)
{
   Mystring = Mystring.Replace(s, varDataList[index]);
   index++;
}

输出:

1214arajark

【讨论】:

  • 为什么我被否决了?
【解决方案3】:

我不确定您的确切要求是什么希望这会有所帮助

        string Mystring = "adhbegadhjmqadguvaadgaegadguvabdh";
        StringBuilder sb = new StringBuilder(Mystring);
        sb.Replace("dfd", "a");
        sb.Replace("fee", "b");
        sb.ToString();

或者这个会有所帮助

        string[] str = { "dfd", "dfdf" };
        string[] abc = { "a", "b" };
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++)
        {
            str[i] = abc[i];
            sb.Append(str[i]);
        }
        sb.ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2013-02-15
    • 2020-12-13
    • 1970-01-01
    • 2016-02-06
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多