Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 16.07.2014
Сообщений: 30
1

Подписать строку с помощью HMACSHA256

21.11.2017, 00:05. Показов 2237. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый вечер
Мне нужно подписать данные (строку) ключом, функцией HMACSHA256
Пользователь сам вводит строку
Когда я подписываю обычные символы, всё ок - в ответе правильный хеш
Если же строка содержит русские символы, то хеш неправильный
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 который правильно подписывает строку с русскими символами
Python
1
2
3
4
5
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
Менял различные кодировки, не работает
Нужна помощь, заранее спасибо!

Добавлено через 52 минуты
UPDATE:
Если прописать значение в коде
C#
1
2
HMACSHA256 hm = new HMACSHA256(Encoding.ASCII.GetBytes(key));
byte[] result = hm.ComputeHash(Encoding.UTF8.GetBytes("форум"));
Это работает.
Но если ввести значение с консоли, результат неправильный. Как это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2017, 00:05
Ответы с готовыми решениями:

Нарисовать координатные оси, подписать их, подписать деления осей
Построить графики указанных функций. При построении графика функции выбрать такой масштаб, чтобы...

С помощью string прочитать строку
Нужно сделать так: С помощью string прочитать строку Пример: Output То есть число каждых...

Можно ли с помощью JS считать get-строку?
Подскажите как это можно сделать?

Зашифровать строку с помощью шифра перестановки
Дана строка текста. Зашифровать ее с помощью шифра перестановки, который заключается в том, что...

1
Администратор
Эксперт .NET
17548 / 13771 / 5298
Регистрация: 17.03.2014
Сообщений: 28,247
Записей в блоге: 1
21.11.2017, 02:18 2
Цитата Сообщение от hahanov Посмотреть сообщение
Если прописать значение в коде
C#
1
2
HMACSHA256 hm = new HMACSHA256(Encoding.ASCII.GetBytes(key));
byte[] result = hm.ComputeHash(Encoding.UTF8.GetBytes("форум"));
Это работает.
Но если ввести значение с консоли, результат неправильный. Как это исправить?
Элементарно Ватсон. Нужно тоже использовать кодировку UTF8, а не ASCII в которой нет русских букв.
0
21.11.2017, 02:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2017, 02:18
Помогаю со студенческими работами здесь

Распарсить строку с помощью регулярного выражения
Парсю вот таким способом: String One = ss->DataString; String expr = "\"body\":\"(.*?)\"";...

Как разделить строку с помощью preg_match()?
помогите еще вот строка charater_vvv как с помощю preg_match(); ее разделить

Распарсить строку со скобками с помощью Regex
Как с помощью регулярного выражения вытащить из строки ряд символов, если в строке присутствуют...

Добавить в листбокс строку с помощью событий
Проблема такова. Есть два класса: 1) public partial class NetWork : Form 2) public class Networks...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru