Vb.net арифметическая операция привела к переполнению при декодировании
Я работаю над новой функцией декодирования для инструмента восстановления пароля. Я пробовал код на c++ и работал (я не писал эту функцию):
void poco_pwd(u_char *pwd, int type) { int len, tmp; u_char *out; short azz; if(type) azz = 0x2537; // encrypt message else azz = 0x2a9a; // other passwords len = strlen(pwd) >> 1; out = pwd; while(len--) { sscanf(pwd, "%02X", &tmp); pwd += 2; *out++ = tmp ^ (azz >> 8); azz = ((tmp + azz) * 0x8141) + 0x3171; } *out = 0; }
Я попытался преобразовать этот код в vb.net и c#, но он бросает арифметическую операцию переполнения. Это новое значение функции помещается в переменную" azz". "azz" - это короткая переменная, но эти значения очень длинные (((tmp + azz) * 0x8141) + 0x3171). Странно, что он работает на c++.
Что я уже пробовал:
Я преобразовать этот код, чтобы vb.net:
Dim encpass As String = "1EF66D8BD3C32476CEC8CF" 'Hex Value Dim encpassByte As Byte() = Encoding.UTF8.GetBytes(HexToString(encpass)) Dim azz As Integer = &H2A9A Dim len As Integer = encpassByte.Length >> 1 Dim storage(len) As Char For i = 0 To len storage(i) = (ChrW(encpassByte(i) Xor (azz >> 8))) azz = ((encpassByte(i) + azz) * &H8141) + &H3171 'Error: arithmetic operation resulted in an overflow. Next Console.WriteLine(storage.ToString) Console.ReadKey()
Функция Hex to string
Function HexToString(ByVal hex As String) As String Dim text As New System.Text.StringBuilder(hex.Length \ 2) For i As Integer = 0 To hex.Length - 2 Step 2 text.Append(Chr(Convert.ToByte(hex.Substring(i, 2), 16))) Next Return text.ToString End Function