Расшифровка строки с помощью Microsoft Crypto API с C#
Так что на моем рабочем месте у меня есть веб-приложение на основе.NET, которое должно выбрать зашифрованный параметр в строке запроса.
Те, кто предоставляет зашифрованную строку, являются внешними подрядчиками, и они предпочитают (почти требуют. Хотя подрядчики не могут сменить подрядчиков, а такие вещи решают...) использовать Crypto API от Microsoft для шифрования строки.
Ну, честно говоря, AFAIK Я могу расшифровать это с помощью C#, но после бесконечных поисков я все еще не понимаю, как это работает.
Это означает, что я даже не могу предоставить пример кода, и я застрял в этой привязке, пока не смогу расшифровать эту строку.
Что у меня есть:
У меня есть общий пароль, который они шифруют, и я должен использовать, чтобы расшифровать его.
Настройки шифрования: "CALC_AES_128", хэш: "CALC_MD5". Строка зашифрована, затем хеширована.
Поэтому я хочу распаковать его и расшифровать.
Я знаю, это много, чтобы спросить, но как мне это сделать?
1 ответ
Ваш внешний подрядчик не знает, о чем он говорит.
Хеши используются как функция люка, способ распознать что-либо, не сказав, что это за штука. Это цифровой отпечаток. Способ создания хеша CRYPTOGRAPHICALLY SECURE означает, что даже с учетом хеша и алгоритма трудно создать объект, который соответствует отпечатку пальца.
AES - это недетерминированный шифр. Недетерминизм исходит из вектора инициализации, который каждый раз должен быть случайным числом (не жестко закодированным из броска кубика, хм, Sony). Это означает, что для всех намерений и целей вывод AES является чисто случайным (если у вас нет ключа). Хорошие шифры предназначены для получения статистически случайных данных (поэтому данных для атаки мало).
Таким образом, передавая данные в функцию, которая создает случайные данные, а затем помещая их в функцию "ловушки", вы производите что-то, что действительно трудно декодировать (сложно в этом смысле математически, вам действительно нужно больше энергии, чем существует во вселенной, чтобы вычислить это).
Что касается того, как передавать данные безопасным способом (безопасным как против любопытных глаз в незащищенной сети) в строке запроса? Существует хорошо известный протокол, который поддерживает.net, который делает это очень хорошо. Это называется HTTPS.