2
嗨我想查找單個字符串的校驗和。這裏是校驗和的要求。在C#中找到一個字符串的校驗和.net
- 以十六進制字符表示的32位/ 8字節校驗和。
- 它應該是頭+會話+ body +消息的XOR。
讓我們假設header + session + body + message =「這是測試字符串」。我想計算這個的校驗和。到目前爲止,我開發了下面的代碼。
校驗計算正確如果string length(byte[] data)
是4
倍數。如果「數據」不是4的倍數我接收異常作爲
「System.IndexOutOfRangeException:索引的邊界之外陣列「。
我將從用戶採取不同字符串長度的輸入,因此字符串長度將是可變的(意味着某些時間用戶只能輸入ABCDE幾次q和A等)。我怎樣才能解決這個問題,除了計算和校驗正確與4
public string findchecksum(string userinput)
try
{
ASCIIEncoding enc = new ASCIIEncoding();
byte[] data = Encoding.ASCII.GetBytes(userinput);
byte[] checksum = new byte[4];
for (int i = 16; i <= data.Length - 1; i += 4)
{
checksum[0] = (byte)(checksum[0]^data[i]);
checksum[1] = (byte)(checksum[1]^data[i + 1]);
checksum[2] = (byte)(checksum[2]^data[i + 2]);
checksum[3] = (byte)(checksum[3]^data[i + 3]);
}
int check = 0;
for (int i = 0; i <= 3; i++)
{
int r = (Convert.ToInt32(checksum[i]));
int c = (-(r + (1))) & (0xff);
c <<= (24 - (i * 8));
check = (check | c);
}
return check.ToString("X");
通過擴展數據數組會影響原始字符串? –
不,它不會。源字符串和字節數組不綁定在一起。 – MarcinJuraszek
非常感謝你的幫助:) –