Member 13142345 Ответов: 1

Как сопоставить хэш-строку, сгенерированную алгоритмом SHA512, со строкой платежного шлюза


Я интегрирую свое веб-приложение asp .net с платежным шлюзом, и в своем документе они сказали использовать алгоритм SHA512 для строки.
поэтому я использую хэш-код SHA512, как показано ниже, и генерирую хэш-подпись.
Но сигнатура, которую я генерирую, отличается от их. Так что я получаю ошибку.

Итак, вопрос в следующем

1) все алгоритмы SHA512 производят один и тот же результат?
Им своих поисках они не являются одинаковыми
2) Если существует много алгоритмов SHA512, то какой из них я хочу использовать?
Могу ли я попросить людей платежного шлюза предоставить мне этот алгоритм?
3) Существует ли какой-либо общий алгоритм SHA512, который соответствует всем остальным алгоритмам?

Мне очень жаль, если эти вопросы кажутся вам смешными. Но я новичок в этой интеграции платежного шлюза.

заранее спасибо

Что я уже пробовал:

public String computeHash(строковое сообщение)
{
byte[] sourceBytes = кодировка.По умолчанию.GetBytes(сообщение);
byte[] hashBytes = null;

hashBytes = SHA512Managed.Творить().ComputeHash(исходные файлы);

Проверьте новое окно инструментов();
for (int i = 0; i<hashBytes.Длина; i++)
{
sb.AppendFormat("{0:x2}", hashBytes[i]);
}
возвращение СБ.Метод toString();
}

1 Ответов

Рейтинг:
11

Thomas Daniels

Не существует нескольких алгоритмов SHA512; есть только один, то Алгоритм SHA512. Все реализации SHA512 должны возвращать одни и те же байты, иначе они больше не были бы реализациями SHA512.

Но обратите внимание, что SHA512 принимает байты в качестве входных данных и выводит массив хэшированных байтов. То, как эти выходные байты кодируются в виде строки, может отличаться. Например, вы можете кодировать их как шестнадцатеричные или как base64. Вы говорите: "в моем поиске они не совпадают"; единственное, что должно отличаться, - это кодировка вывода.

Я не знаю, должен ли ваш код кодировать выходные данные как шестнадцатеричные, base64 или что-то еще. Обратитесь к документации для этого.


Member 13142345

Спасибо за ответ и объяснение.
В документации он указан как шестнадцатеричный. Так как же мой вышеприведенный код должен быть закодирован в шестнадцатеричный формат? пожалуйста, помогите мне с этим.

Thomas Daniels

Ваш код, кажется, работает нормально. Выход является уже шестнадцатеричный.

Member 13142345

Так что можете ли вы предложить мне решение, как достичь этой ошибки несоответствия, если я делаю это как шестнадцатеричную строку.

Thomas Daniels

Вы можете попробовать прописные шестнадцатеричные. Если это не сработает, я свяжусь с системой платежных шлюзов, они гораздо лучше знают, что происходит.

Member 13142345

Ты действительно хотел это сделать

возвращение СБ.Метод toString().Таппер();

Thomas Daniels

Я думаю, что вам даже не нужен Таппер, но вы можете использовать "X2" вместо "x2".