Добрый вечер, мне нужно подписать данные (строку) ключом, функцией HMACSHA256 Пользователь сам вводит строку
Когда я подписываю обычные символы, всё ок - в ответе правильный хеш, если же строка содержит русские символы, то хеш неправильный Вот код на C#:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Program
{
public static void Main()
{
Encoding enc = Encoding.GetEncoding("ASCII");
String key = "20f31fbce8c54800bffa5f5d767f2cf142ebcfb87ac4ab76c0c55ba7f1934481";
String packet;
Console.WriteLine("Input Data: ");
packet = Console.ReadLine();
HMACSHA256 hm = new HMACSHA256(enc.GetBytes(key));
byte[] result = hm.ComputeHash(enc.GetBytes(packet));
String hex = BitConverter.ToString(result);
hex = hex.Replace("-", "");
Console.WriteLine(hex.ToLower());
}
}
Есть код на Python 2.7 который правильно подписывает строку с русскими символами
import hmac,hashlib
key = '20f31fbce8c54800bffa5f5d767f2cf142ebcfb87ac4ab76c0c55ba7f1934481'
packet= raw_input("Input Data:")
sig = hmac.new(key, packet, digestmod=hashlib.sha256).digest().encode("hex")
print(sig)
Пример, вводим слово: форум
Правильный хеш от python: a6aa8f3d443d7e2592eea7b5c290dbe7d418c8329912b22c2e4e4c0d1ce6a18b
Неправильный от c#: e5a15bb8434e7f0fb6b6ce5e63730a7d119dc14d223ffb5f48a132416948ecdf Менял различные кодировки, не работает
Нужна помощь, заранее спасибо!
Я не знаю, какие вы кодировки пробовали, но работает с UTF-8:
String key = "20f31fbce8c54800bffa5f5d767f2cf142ebcfb87ac4ab76c0c55ba7f1934481";
HMACSHA256 hm = new HMACSHA256(Encoding.ASCII.GetBytes(key));
byte[] result = hm.ComputeHash(Encoding.UTF8.GetBytes("форум"));
String hex = BitConverter.ToString(result);
Console.WriteLine(hex.Replace("-", ""));
Результат:
A6AA8F3D443D7E2592EEA7B5C290DBE7D418C8329912B22C2E4E4C0D1CE6A18B
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, мой вопрос касательно архитектуры, точнее его смыслаЯ залез в эту тему, до конца не понимая в чем смысл RabbitMQ и SignalR
Интересует каким образом можно средствами C# определить тип прокси: Socks4, Socks5, http, имея адрес : порт не используя webrequest запросовЕсли не затруднит...