Подпись PayFort с использованием SHA256

https://docs.payfort.com/docs/in-common/build/index.html#create-signature-value

Мне нужна помощь в создании подписи SHA256 для токенизации PayFort. Пример в ссылке дает вам базовое руководство по токенизации вашего запроса, но мне нужна информация о том, как сгенерировать подпись SHA256 с секретным ключом и расшифровать подпись ответа с помощью ключа. У меня есть все данные, необходимые для ключей перефразирования запросов и ответов. Я не совсем понимаю, как создать правильную подпись SHA256 с секретным ключом на С#. Я пробовал разные примеры для создания подписи SHA256, но он возвращает несоответствие подписи.

Пример из документации PayFort:

SHA Request Phrase: PASS 
SHA-Type: SHA-256

PASSaccess_code=SILgpo7pWbmzuURp2qrilanguage=enmerchant_identifier=MxvOupuGmerchant_reference=MyReference0001service_command=TOKENIZATIONPASS

Как я могу правильно зашифровать и расшифровать его на С#.

Любая помощь приветствуется.

Редактировать:

Я стреляю вслепую, любой, кто знаком с интеграцией PayFort с C #, может мне помочь

public static String Sign(String data, String key)
{
    KeyedHashAlgorithm algorithm = new HMACSHA256();
    Encoding encoding = new UTF8Encoding();
    algorithm.Key = encoding.GetBytes(key);
    return Convert.ToBase64String(algorithm.ComputeHash(
        encoding.GetBytes(data.ToCharArray())));
}

person Babar    schedule 10.09.2018    source источник
comment
Вы не можете расшифровать хэши. Можете ли вы показать нам код, который вы пробовали до сих пор для генерации хэшей?   -  person Llama    schedule 10.09.2018
comment
Кроме того, я получаю тот же хеш, что и в их примере, когда использую их пример ввода, поэтому разумно ожидать, что любой найденный вами пример для использования SHA256 будет работать.   -  person Llama    schedule 10.09.2018


Ответы (1)


Во-первых, вам нужно сгенерировать свою подпись в виде строки. Подпись включает в себя код доступа, язык и т. д. Затем преобразуйте эту подпись в байты. Затем инициализируйте объект sha256Managed. Передайте параметр bytes этому объекту, и он вернет вам еще один байт, но в формате sha256Managed. Теперь вам нужно установить его формат в foreach.

Пожалуйста, найдите приведенный ниже код, который поможет вам.

byte[] bytes = Encoding.UTF8.GetBytes(signature);
            SHA256Managed hashstring = new SHA256Managed();
            byte[] hash = hashstring.ComputeHash(bytes);
            string hashString = string.Empty;
            foreach (byte x in hash)
            {
                hashString += String.Format("{0:x2}", x);
            }
person Hamza Haider    schedule 21.10.2018