Подпись PayFort с использованием SHA256 - PullRequest
0 голосов
/ 10 сентября 2018

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

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

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

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

PASSaccess_code=SILgpo7pWbmzuURp2qrilanguage=enmerchant_identifier=MxvOupuGmerchant_reference=MyReference0001service_command=TOKENIZATIONPASS

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

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

Edit:

Я стреляю в слепую, любой, кто знаком с интеграцией 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())));
}

1 Ответ

0 голосов
/ 21 октября 2018

Сначала вам нужно сгенерировать вашу подпись в виде строки. Подпись включает код доступа, язык и т. Д. Затем преобразуйте эту подпись в байты. Затем инициализируйте объект sha256Managed. Передайте параметр байтов этому объекту, и он вернет вам еще один байт, но в формате 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);
            }
...