将两行代码合并为一行

本文关键字:一行 合并 两行 代码 | 更新日期: 2023-09-27 18:06:12

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";
        }

    }

将两行代码合并为一行

主要问题就在这里:

        for (int i = 0; i < 8; i++)
        {
            totVector = (byte)(totVector + p[i]);
        }

最简单的修复方法是,如果数组没有那么多元素,就不要尝试进行8次迭代。所以先计算长度:

int len = Math.Min(p.Length, 8);  // limit to no more than the length
for (int i = 0; i < len; i++)
{
    totVector = (byte)(totVector + p[i]);
}

当您将字符串编码为ASCII时,这是有意义的。

byte[] p = ASCIIEncoding.ASCII.GetBytes(
            password.Substring(0, password.Length > 8 ? 8 : password.Length));

我将从几个问题开始…

  1. 如果密码超过8个字符,您是否希望将"密码"截断为8个字符?
  2. 如果password是<8个字符?

你可以这样做:

byte[] p = ASCIIEncoding.ASCII.GetBytes(String.Format("{0,-8}",password));

这将截断password为8个字符,如果小于8个字符,则尾垫为空格。