Кстати, вместо shl, shr, << и >> можно использовать деление и умножение, таким образом можно значительно упростить функцию.
Я думаю, что Нивал их и использовал у себя в алгоритме, мы ведь эту функцию восстанавливали из Assembler'а.
Думаю в C++ исходниках Нивала алгоритм имел такой вид:
А это, код на C#:
Если кто может перевести этот код на Delphi и VB
Я думаю, что Нивал их и использовал у себя в алгоритме, мы ведь эту функцию восстанавливали из Assembler'а.
Думаю в C++ исходниках Нивала алгоритм имел такой вид:
Код:
PBYTE cryptScript( PBYTE buf, DWORD dwKey, DWORD dwSize)
{
for(DWORD i=0;i<dwSize;i++)
{
dwKey = dwKey * 214013 + 2531011;
buf[i] ^= (BYTE)(dwKey / 65536 % 256);
}
return buf;
}
А это, код на C#:
Код:
public string ReadCodedString()
{
byte[] coded = new byte[DataSize - 4]; // sizeof(coded string) - sizeof(key)
char[] decoded = new char[coded.Length];
uint uKey;
// Read
uKey = orStream.ReadUInt32(); // KEY
coded = orStream.ReadBytes(coded.Length); // Coded string
// Decode string
for(int i = 0; i < coded.Length; i++)
{
uKey = uKey * 214013 + 2531011;
decoded[i] = Convert.ToChar(coded[i] ^ Convert.ToByte(uKey / 65536 % 256));
}
return new string(decoded, 0, decoded.Length );
}