Не удается преобразовать из "string" в "Byte[]" - C#
Формулировка задачи:
Добрый день.
Есть хэширование SHA1.
Но, в строчке
string hash = sha1.Hash(text);
выбивает подобную ошибку: "Не удается преобразовать из "string" в "Byte[]"" Можно просто преобразовать, но не уверен что это будет правильно. Прошу помощи! Заранее спасибо!
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Security.Cryptography;
- namespace ConsoleApplication5
- {
- class Program
- {
- static void Main(string[] args)
- {
- //var text = args[0];
- string text = "Николай";
- string hash = sha1.Hash(text);
- Console.WriteLine("Хэшированное слово:\n{0}", hash);
- Console.ReadLine();
- }
- }
- static class sha1
- {
- static byte[] pad(byte[] mes)
- {
- byte[] newMes = new byte[((mes.LongLength * 8 + 512 - 447) / 512 + 1) * 512 / 8];
- for (long i = 0; i < mes.LongLength; i++)
- {
- newMes[i] = mes[i];
- }
- newMes[mes.LongLength] = (1 << 7);
- ulong l = (ulong)mes.LongLength * 8;
- for (int i = 0; i < 8; i++)
- {//write l to end of padding
- newMes[newMes.LongLength - i - 1] = (byte)(l >> (i * 8));
- }
- return newMes;
- }
- static uint ch(uint x, uint y, uint z)
- {
- return (x & y) ^ ((~x) & z);
- }
- static uint parity(uint x, uint y, uint z)
- {
- return x ^ y ^ z;
- }
- static uint maj(uint x, uint y, uint z)
- {
- return (x & y) ^ (x & z) ^ (y & z);
- }
- static uint ft(uint x, uint y, uint z, int t)
- {
- if (t <= 19)
- return ch(x, y, z);
- if (t <= 39)
- return parity(x, y, z);
- if (t <= 59)
- return maj(x, y, z);
- return parity(x, y, z);
- }
- static uint rotl(uint a, int n)
- {
- return (a << n) | (a >> (32 - n));
- }
- static uint kt(int t)
- {
- if (t <= 19)
- return 0x5a827999;
- if (t <= 39)
- return 0x6ed9eba1;
- if (t <= 59)
- return 0x8f1bbcdc;
- return 0xca62c1d6;
- }
- static uint wt(byte[] mes, int i, int t)
- {
- if (t <= 15)
- return mes.Skip(i * 512 / 8 + t * 4).Take(4).Aggregate((uint)0, (cur, next) =>
- (cur << 8) | next);
- return rotl(wt(mes, i, t - 3) ^ wt(mes, i, t - 8) ^ wt(mes, i, t - 14) ^
- wt(mes, i, t - 16), 1);
- }
- public static uint[] Hash(byte[] mes)
- {
- mes = pad(mes);
- uint a = 0x67452301;
- uint b = 0xefcdab89;
- uint c = 0x98badcfe;
- uint d = 0x10325476;
- uint e = 0xc3d2e1f0;
- for (int i = 0; i < mes.LongLength / 64; i++)
- {
- uint a1 = a;
- uint b1 = b;
- uint c1 = c;
- uint d1 = d;
- uint e1 = e;
- for (int t = 0; t <= 79; t++)
- {
- uint T = rotl(a, 5) + ft(b, c, d, t) + e + kt(t) + wt(mes, i, t);
- e = d;
- d = c;
- c = rotl(b, 30);
- b = a;
- a = T;
- }
- a += a1;
- b += b1;
- c += c1;
- d += d1;
- e += e1;
- }
- return new uint[] { a, b, c, d, e };
- }
- }
- }
Решение задачи: «Не удается преобразовать из "string" в "Byte[]"»
textual
Листинг программы
- uint[] temp = new uint[] { a, b, c, d, e };
- byte[] hash = new byte[temp.Length*sizeof(uint)];
- Buffer.BlockCopy(temp, 0, hash, 0, hash.Length);
- for (int i=0, j=0; i<temp.Length; i++, j+=sizeof(uint))
- {
- Array.Reverse(hash, j, sizeof(uint));
- }
- return hash;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д