C# XOR密码有什么规则吗?
我有下面的方法,它采用纯文本和关键文本。它应该返回一个用XOR方法加密的字符串作为asciiC# 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
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个不同的(可打印)字符:)这是有意义的方法不应该返回一个可读的密码而是一个整数数组?这是有意义的方法不应该返回一个可读的密码而是一个整数数组?