gpt4 book ai didi

c# - 串行 key 生成 xor 字符串加密

转载 作者:行者123 更新时间:2023-11-30 23:02:30 25 4
gpt4 key购买 nike

当我对 string 执行 xor 时,我得到特殊字符

private void btnEncryptDecrypt_Click(object sender, EventArgs e)
{
byte[] bytes = Encoding.UTF8.GetBytes(keyTextBox.Text);
textTextBox.Text = string.Empty;

foreach (byte i in bytes)
{
byte c = Convert.ToByte(i ^ Convert.ToByte(textBox1.Text));

textTextBox.Text = textTextBox.Text + Convert.ToChar(c);

}

}

62FA7AC4 1234567890 xor!%QV VT#7&%$#"! /.'

我想用它来生成只有字母数字字符的序列号我想在 "62FA7AC4"date 之间传递 number ,一个 0 和一个 5000 以及一些随机的虚拟数字

输入 将是 "62FA7AC4"+"2500"+"21/05/2018"

输出 应该类似于 "5QBK-J4D1-8CF6-5MW2-78FZ-2FPL-4S6S-CTGB"

我做错了什么?

最佳答案

尝试使用数字,而不是字符串:

  using System.Numerics;

...

// Let's use BigInteger for arbitrary long values
BigInteger left = BigInteger.Parse("62FA7AC4", NumberStyles.HexNumber);
BigInteger right = BigInteger.Parse("1234567890", NumberStyles.HexNumber);

string result = (left ^ right).ToString("X");

Console.Write(result);

所以你有

  1256AC0254

编辑:据我所知,您需要字母数字(即 Base 36 == 26 letters + 10 digits 输出)。您可以使用相同的方法:使用整数而不是字符串进行操作

  private static Random s_Random = new Random();

...

BigInteger value = BigInteger.Parse(
"0" + // we don't want negative values
"62FA7AC4" + // header
s_Random.Next(5001).ToString("0000") + // random in [0..5000] range
DateTime.Today.ToString("ddMMyyyy"), // Date like 21052018
NumberStyles.HexNumber);

然后做任何异或(如果你喜欢):

 value ^= some_secret_value;

最后表示 base 36 中的:

private static String ToBase36(BigInteger value) {
List<char> list = new List<char>();

for (int index = 0; value > 0; value /= 36, index++) {
if (index > 0 && index % 4 == 0)
list.Add('-');

BigInteger v = value % 36;

list.Add(v < 10 ? (char)('0' + v) : (char) ('A' + v - 10));
}

list.Reverse();

return string.Concat(list);
}

测试:

 BigInteger value = BigInteger.Parse(
"0" +
"62FA7AC4" +
"2500" +
DateTime.Today.ToString("ddMMyyyy"),
NumberStyles.HexNumber);

string result = ToBase36(value);

Console.Write(result);

结果:

2443-WNC5-AVBB-M32W

编辑2:恢复原来的号码

private static BigInteger FromBase36(string value) {
BigInteger result = 0;
BigInteger power = 1;

for (int i = value.Length - 1; i >= 0; --i) {
char item = value[i];

if (item >= '0' && item <= '9') {
result += power * (item - '0');
power *= 36;
}
else if (item >= 'A' && item <= 'Z') {
result += power * (item - 'A' + 10);
power *= 36;
}
else if (item >= 'a' && item <= 'z') {
result += power * (item - 'a' + 10);
power *= 36;
}
}

return result;
}

例如

BigInteger value = BigInteger.Parse(
"0" +
"62FA7AC4" +
"2500" +
DateTime.Today.ToString("ddMMyyyy"),
NumberStyles.HexNumber);

string result = ToBase36(value);

BigInteger back = FromBase36(result);

Console.WriteLine(string.Join(Environment.NewLine, value, result, back));

结果:

467412447575903165554712
2443-WNC5-AVBB-M32W
467412447575903165554712

关于c# - 串行 key 生成 xor 字符串加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com