public string Encrypt(string message) { var bitList = new BitList(new BitArray(Encoding.UTF8.GetBytes(message))); if (bitList.Count > 256) { throw new SHA_256_Exception("Message must be equal or less then 256 bit"); } bitList.ListOfBits.Add(true); //Added one bit if (bitList.Count < 448) //Added (L + 1 + K) mod 512 zero bits { bitList.AddBits(448 - bitList.Count); } BitList.Concate(bitList.ListOfBits, new BitList(new BitArray(message.Length), 64).ListOfBits); //Added 64 bit word length var blocks32 = BitList.Split(bitList, 32); for (int i = 16; i < 63; i++) { var s0 = (BitList.RotRight(blocks32[i - 15].ListOfBits, 7)) ^ (BitList.RotRight(blocks32[i - 15].ListOfBits, 18)) ^ (BitList.LogicRight(blocks32[i - 15], 3)); var s1 = (BitList.RotRight(blocks32[i - 2].ListOfBits, 17)) ^ (BitList.RotRight(blocks32[i - 2].ListOfBits, 19)) ^ (BitList.LogicRight(blocks32[i - 2], 10)); blocks32.Add((blocks32[i - 16] + s0) + (blocks32[i - 7] + s1)); } var a = H[0]; var b = H[1]; var c = H[2]; var d = H[3]; var e = H[4]; var f = H[5]; var g = H[6]; var h = H[7]; for (int i = 0; i < 63; i++) { var sum0 = (a >> 2) ^ (a >> 13) ^ (a >> 22); var Ma = (a & b) ^ (a & c) ^ (b & c); var t2 = sum0 + Ma; var sum1 = (e >> 6) ^ (e >> 11) ^ (e >> 25); var Ch = (e & f) ^ ((~e) & g); var t1 = h + sum1 + Ch + blocks32[i] + K[i]; h = g; g = f; f = e; e = t1 + d; d = c; c = b; b = a; a = t1 + t2; } H[0] += a; H[1] += b; H[2] += c; H[3] += d; H[4] += e; H[5] += f; H[6] += g; H[7] += h; return($"{H[0]} {H[1]} {H[2]} {H[3]} {H[4]} {H[5]} {H[6]} {H[7]}"); }