public static byte[] buf, m;
public static ulong messageLength, blocksQty;
public static void hash(byte[] message)
buf = new byte[message.LongLength];
Array.Copy(message, buf, message.LongLength);
messageLength = (ulong)message.LongLength;
blocksQty = (ulong)m.LongLength / 64;
public static void completeMessageLength()
int zeroBitsToAddQty = 512 - (int)(((ulong)buf.LongLength * 8 + 1 + 64) % 512);
m = new byte[((ulong)buf.LongLength * 8 + 1 + 64 + (ulong)zeroBitsToAddQty) / 8];
Array.Copy(buf, m, buf.LongLength);
for (ulong i = (messageLength + 1); i < (ulong)m.LongLength; i++)
byte[] messageBitLength_little_endian = BitConverter.GetBytes(messageLength * 8);
byte[] messageBitLength_big_endian = new byte[messageBitLength_little_endian.Length];
for (int i = 0, j = messageBitLength_little_endian.Length - 1; i < messageBitLength_little_endian.Length; i++, j--)
messageBitLength_big_endian[i] = messageBitLength_little_endian[j];
Array.Copy(messageBitLength_big_endian, 0, m, m.LongLength - 8, 8);
public static void Main()
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("KOI8");
byte[] _buf = enc.GetBytes("abc");
Console.WriteLine(enc.GetString(_buf));
Console.WriteLine("Hello World");