Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# XOR密码有什么规则吗?_C#_Encryption_Xor - Fatal编程技术网

C# XOR密码有什么规则吗?

C# XOR密码有什么规则吗?,c#,encryption,xor,C#,Encryption,Xor,我有下面的方法,它采用纯文本和关键文本。它应该返回一个用XOR方法加密的字符串作为ascii public static string encryptXOREng(string plainText,string keyText) { StringBuilder chiffreText = new StringBuilder(); byte[] binaryPlainText = System.Text.Encoding.ASCI

我有下面的方法,它采用纯文本和关键文本。它应该返回一个用XOR方法加密的字符串作为ascii

public static string encryptXOREng(string plainText,string keyText) 
        {
            StringBuilder chiffreText = new StringBuilder();

            byte[] binaryPlainText = System.Text.Encoding.ASCII.GetBytes(plainText);

            byte[] binaryKeyText = System.Text.Encoding.ASCII.GetBytes(keyText);


            for(int i = 0;i<plainText.Length;i++)
            {
                int result = binaryPlainText[i] ^ binaryKeyText[i];
                chiffreText.Append(Convert.ToChar(result));
            }

            return chiffreText.ToString();
        }
publicstaticstringencryptxoreng(字符串明文、字符串keyText)
{
StringBuilder chiffreText=新StringBuilder();
byte[]binaryPlainText=System.Text.Encoding.ASCII.GetBytes(纯文本);
byte[]binaryKeyText=System.Text.Encoding.ASCII.GetBytes(keyText);

就我所知,对于(int i=0;i而言,没有特定于xor密码的规则。加密函数通常输出不可打印的值,这很有意义-结果不应该是可读的。相反,您可能希望直接使用输出字节或base64编码的结果

我会这样做:

public static byte[] XORCipher(string plainText, string keyText)
{
    byte[] binaryPlainText = System.Text.Encoding.ASCII.GetBytes(plainText);
    byte[] binaryKeyText = System.Text.Encoding.ASCII.GetBytes(keyText);

    for(int i = 0;i<plainText.Length;i++)
    {
        binaryPlainText[i] ^= binaryKeyText[i];
    }
    return binaryPlainText;
}
public static byte[]XORCipher(字符串明文,字符串keyText)
{
byte[]binaryPlainText=System.Text.Encoding.ASCII.GetBytes(纯文本);
byte[]binaryKeyText=System.Text.Encoding.ASCII.GetBytes(keyText);

就我所知,对于(int i=0;i而言,没有特定于xor密码的规则。加密函数通常输出不可打印的值,这很有意义-结果不应该是可读的。相反,您可能希望直接使用输出字节或base64编码的结果

我会这样做:

public static byte[] XORCipher(string plainText, string keyText)
{
    byte[] binaryPlainText = System.Text.Encoding.ASCII.GetBytes(plainText);
    byte[] binaryKeyText = System.Text.Encoding.ASCII.GetBytes(keyText);

    for(int i = 0;i<plainText.Length;i++)
    {
        binaryPlainText[i] ^= binaryKeyText[i];
    }
    return binaryPlainText;
}
public static byte[]XORCipher(字符串明文,字符串keyText)
{
byte[]binaryPlainText=System.Text.Encoding.ASCII.GetBytes(纯文本);
byte[]binaryKeyText=System.Text.Encoding.ASCII.GetBytes(keyText);

对于(int i=0;i为避免不可打印字符,请使用
Convert.ToBase64String

public static string encryptXOREng(string plainText, string keyText)
{
    List<byte> chiffreText = new List<byte>();    

    byte[] binaryPlainText = System.Text.Encoding.ASCII.GetBytes(plainText);

    byte[] binaryKeyText = System.Text.Encoding.ASCII.GetBytes(keyText);


    for (int i = 0; i < plainText.Length; i++)
    {
        int result = binaryPlainText[i] ^ binaryKeyText[i % binaryKeyText.Length];
        chiffreText.Add((byte)result);
    }

    return Convert.ToBase64String(chiffreText.ToArray());
}
publicstaticstringencryptxoreng(字符串明文、字符串keyText)
{
List chiffreText=新列表();
byte[]binaryPlainText=System.Text.Encoding.ASCII.GetBytes(纯文本);
byte[]binaryKeyText=System.Text.Encoding.ASCII.GetBytes(keyText);
for(int i=0;i

PS:在您的代码中,您假定
keyText
不短于
明文
,我也修复了它。

为了避免不可打印的字符,请使用
Convert.ToBase64String

public static string encryptXOREng(string plainText, string keyText)
{
    List<byte> chiffreText = new List<byte>();    

    byte[] binaryPlainText = System.Text.Encoding.ASCII.GetBytes(plainText);

    byte[] binaryKeyText = System.Text.Encoding.ASCII.GetBytes(keyText);


    for (int i = 0; i < plainText.Length; i++)
    {
        int result = binaryPlainText[i] ^ binaryKeyText[i % binaryKeyText.Length];
        chiffreText.Add((byte)result);
    }

    return Convert.ToBase64String(chiffreText.ToArray());
}
publicstaticstringencryptxoreng(字符串明文、字符串keyText)
{
List chiffreText=新列表();
byte[]binaryPlainText=System.Text.Encoding.ASCII.GetBytes(纯文本);
byte[]binaryKeyText=System.Text.Encoding.ASCII.GetBytes(keyText);
for(int i=0;i

PS:在你的代码中,你假设
keyText
不短于
plainText
,我也修复了它。

我知道,这只是一个示例,我还使用了一个调整键方法。转换为Base64也会限制输出字符的范围,不是吗?@bodycountPP是的,它将包含64个不同的(可打印)字符:)我知道,这只是一个示例,我还举了一个调整键方法。转换为Base64也会限制输出字符的范围,不是吗?@bodycountPP是的,它将包含64个不同的(可打印)字符:)这是有意义的方法不应该返回一个可读的密码而是一个整数数组?这是有意义的方法不应该返回一个可读的密码而是一个整数数组?