C# 简单字节加密不起作用
解密消息时,字符比原始字符少一个。例:H将是G 我试着通过打印值来调试代码,一切都很顺利,直到尝试除以100000并乘以日期 以下是我使用的代码: 我这里没有包括主要的方法C# 简单字节加密不起作用,c#,encryption,C#,Encryption,解密消息时,字符比原始字符少一个。例:H将是G 我试着通过打印值来调试代码,一切都很顺利,直到尝试除以100000并乘以日期 以下是我使用的代码: 我这里没有包括主要的方法 public static string encrypt(string input) { string final; string date = DateTime.Now.Date.ToShortDateString().ToString(); var da
public static string encrypt(string input)
{
string final;
string date = DateTime.Now.Date.ToShortDateString().ToString();
var datetime = int.Parse(date.Replace("/", ""));
List<int> semi = new List<int>();
var bytes = Encoding.UTF8.GetBytes(input.ToCharArray());
for (int i = 0; i < bytes.Length; i++)
{
int y = bytes[i] * datetime / 100000;
semi.Add(y);
Console.WriteLine(y);
}
Console.WriteLine(string.Join("", bytes));
final = string.Join(":", semi.ToArray()) + ":" + date;
return final;
}
public static string decrypt(string input)
{
string final;
string[] raw = input.Split(':');
int date = int.Parse(raw[raw.Length - 1].Replace("/",""));
var dump = new List<string>(raw);
dump.RemoveAt(raw.Length - 1);
string[] stringbytes = dump.ToArray();
List<byte> bytes = new List<byte>();
for (int i = 0; i < stringbytes.Length; i++)
{
int x = int.Parse(stringbytes[i]);
Console.WriteLine(x);
x = x * 100000 / date;
byte finalbytes = Convert.ToByte(x);
bytes.Add(finalbytes);
}
Console.WriteLine(string.Join("", bytes.ToArray()));
Console.WriteLine(date);
var bytearray = bytes.ToArray();
final = Encoding.UTF8.GetString(bytearray);
return final;
}
公共静态字符串加密(字符串输入)
{
弦乐决赛;
字符串日期=DateTime.Now.date.ToSortDateString().ToString();
var datetime=int.Parse(date.Replace(“/”,“”));
List=newlist();
var bytes=Encoding.UTF8.GetBytes(input.tocharray());
for(int i=0;i
可能是整数除法的舍入错误。在进行整数运算时,很可能((x*日期/100000)*100000/日期)!=x
,事实上唯一的时间是==x
是在日期%100000==0
时
修复整数除法引入的舍入错误,它将修复您的问题
p.S.我也很犹豫是否将此称为“加密”,因为没有密钥,解密消息所需的所有信息都在消息本身中。你只需要依赖这样一个事实:算法是秘密的,这在C#中几乎是不可能做到的。我更愿意将您正在做的事情称为“编码”,因为要解码正在编码的东西,您只需要知道算法。很可能是整数除法的舍入错误。在进行整数运算时,很可能
((x*日期/100000)*100000/日期)!=x
,事实上唯一的时间是==x
是在日期%100000==0
时
修复整数除法引入的舍入错误,它将修复您的问题
p.S.我也很犹豫是否将此称为“加密”,因为没有密钥,解密消息所需的所有信息都在消息本身中。你只需要依赖这样一个事实:算法是秘密的,这在C#中几乎是不可能做到的。我更愿意将您正在做的事情称为“编码”,因为要解码正在编码的东西,您只需要知道算法。您正在使用低精度数据类型
int
来存储除法的结果。我已将该类型更改为double
,它可以正常工作
public static string encrypt(string input)
{
string final;
string date = DateTime.Now.Date.ToString("MMddyyyy");
var datetime = int.Parse(date);
List<double> semi = new List<double>();
var bytes = Encoding.UTF8.GetBytes(input);
for (int i = 0; i < bytes.Length; i++)
{
double y = bytes[i] * datetime / 100000;
semi.Add(y);
Console.WriteLine(y);
}
Console.WriteLine(string.Join("", bytes));
final = string.Join(":", semi.ToArray()) + ":" + date;
return final;
}
public static string decrypt(string input)
{
string final;
string[] raw = input.Split(':');
int date = int.Parse(raw[raw.Length - 1].Replace("/", ""));
var dump = new List<string>(raw);
dump.RemoveAt(raw.Length - 1);
string[] stringbytes = dump.ToArray();
List<byte> bytes = new List<byte>();
for (int i = 0; i < stringbytes.Length; i++)
{
var x = double.Parse(stringbytes[i]);
Console.WriteLine(x);
x = x * 100000 / date;
byte finalbytes = Convert.ToByte(x);
bytes.Add(finalbytes);
}
Console.WriteLine(string.Join("", bytes.ToArray()));
Console.WriteLine(date);
var bytearray = bytes.ToArray();
final = Encoding.UTF8.GetString(bytearray);
return final;
}
公共静态字符串加密(字符串输入)
{
弦乐决赛;
字符串日期=DateTime.Now.date.ToString(“MMddyyyy”);
var datetime=int.Parse(日期);
List=newlist();
var bytes=Encoding.UTF8.GetBytes(输入);
for(int i=0;i
这是一个完全工作的控制台应用程序您正在使用低精度数据类型
int
来存储除法结果。我已将该类型更改为double
,它可以正常工作
public static string encrypt(string input)
{
string final;
string date = DateTime.Now.Date.ToString("MMddyyyy");
var datetime = int.Parse(date);
List<double> semi = new List<double>();
var bytes = Encoding.UTF8.GetBytes(input);
for (int i = 0; i < bytes.Length; i++)
{
double y = bytes[i] * datetime / 100000;
semi.Add(y);
Console.WriteLine(y);
}
Console.WriteLine(string.Join("", bytes));
final = string.Join(":", semi.ToArray()) + ":" + date;
return final;
}
public static string decrypt(string input)
{
string final;
string[] raw = input.Split(':');
int date = int.Parse(raw[raw.Length - 1].Replace("/", ""));
var dump = new List<string>(raw);
dump.RemoveAt(raw.Length - 1);
string[] stringbytes = dump.ToArray();
List<byte> bytes = new List<byte>();
for (int i = 0; i < stringbytes.Length; i++)
{
var x = double.Parse(stringbytes[i]);
Console.WriteLine(x);
x = x * 100000 / date;
byte finalbytes = Convert.ToByte(x);
bytes.Add(finalbytes);
}
Console.WriteLine(string.Join("", bytes.ToArray()));
Console.WriteLine(date);
var bytearray = bytes.ToArray();
final = Encoding.UTF8.GetString(bytearray);
return final;
}
公共静态字符串加密(字符串输入)
{
弦乐决赛;
字符串日期=DateTime.Now.date.ToString(“MMddyyyy”);
var datetime=int.Parse(日期);
List=newlist();
var bytes=Encoding.UTF8.GetBytes(输入);
for(int i=0;i