【发布时间】:2014-07-22 21:51:32
【问题描述】:
byte[] p = ASCIIEncoding.ASCII.GetBytes(password);
byte[] p = new Byte[8]
我需要定义数组的大小,同时保留第一行代码。 当我同时编写它们时出现错误,因为 p 数组被定义了两次。我该怎么做?
这是整个代码
public string hasher(string password, string id)
{
try
{
byte[] p = ASCIIEncoding.ASCII.GetBytes(password);
byte[] a6 = ASCIIEncoding.ASCII.GetBytes(id);
byte totVector = 0;
for (int i = 0; i < 8; i++)
{
totVector = (byte)(totVector + p[i]);
}
byte[] a_concat = new byte[2];
a_concat[0] = (byte)((p[6] * totVector) % 256);
a_concat[1] = (byte)((p[7] * totVector) % 256);
byte[] a = new byte[8];
for (int i = 0; i < 6; i++)
{
a[i] = a6[i];
}
a[6] = a_concat[0];
a[7] = a_concat[1];
byte[] h = new byte[8];
string hashedUserPassword = "";
for (int i = 0; i < 8; i++)
{
if (i == 0 || i == 2) h[i] = (byte)((p[i] << 1) ^ a[i]);
else if (i == 3 || i == 5) h[i] = (byte)((p[i] >> 2) ^ a[i]);
else h[i] = (byte)(p[i] ^ a[i]);
hashedUserPassword += h[i].ToString("X2");
}
return hashedUserPassword;
}
catch
{
return "error";
}
}
【问题讨论】:
-
我不明白你在做什么。
GetBytes方法创建一个适当长度的新数组并返回它。为什么要重新定义它? -
所以你实际上只想要字符串的前 8 个字符?
-
为什么p被定义了两次?
-
所以你想得到一个表示给定字符串的字节数组,然后把它扔掉,得到一个大小为 8 的新空白字节数组?对我来说似乎毫无意义。
-
所以修改你的循环运行到
p.Length。