在C#中对字符串进行异或

8 c# xor

我最近开始玩C#,我试图理解为什么下面的代码不能编译.在错误评论的行上,我得到:

无法将类型'int'隐式转换为'char'.显式转换退出(您是否错过了演员?)

我正在尝试使用两个字符串进行简单的XOR操作.

public string calcXor (string a, string b)
{
    char[] charAArray = a.ToCharArray();
    char[] charBArray = b.ToCharArray();
    char[] result = new char[6];
    int len = 0;

    // Set length to be the length of the shorter string
    if (a.Length > b.Length)
        len = b.Length - 1;
    else
        len = a.Length - 1;

    for (int i = 0; i < len; i++) {
        result[i] = charAArray[i] ^ charBArray[i]; // Error here
    }

    return new string (result);
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*oei 16

如果您使用XOR-ing来隐藏数据,请查看下面的代码.只要有必要,密钥将重复.这可能是一个更短/更好的方法:

public static string xorIt(string key, string input)
{
    StringBuilder sb = new StringBuilder();
    for(int i=0; i < input.Length; i++)
        sb.Append((char)(input[i] ^ key[(i % key.Length)]));
    String result = sb.ToString ();

    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,XOR-ing字符串的重点不是强大的安全性,而是"混淆"的一个步骤 - 使得更多的工作可以让人们对代码进行逆向工程,以了解应用程序在哪里工作.具体来说,他们不能简单地搜索你的字符串.他们必须跟踪逻辑,找到XOR方法,并使用适当的密钥通过该方法提供所有字符串. (2认同)

all*_*len 6

你正在做一个xor2 个字符。这将为您进行隐式类型转换,int因为没有数据丢失。但是,从intto转换回char将需要您提供显式转换。

您需要明确地将您的转换intcharfor result[i]

result[i] = (char) (charAArray[i] ^ charBArray[i]);
Run Code Online (Sandbox Code Playgroud)