Расшифровка строки с помощью Microsoft Crypto API с C#

Так что на моем рабочем месте у меня есть веб-приложение на основе.NET, которое должно выбрать зашифрованный параметр в строке запроса.

Те, кто предоставляет зашифрованную строку, являются внешними подрядчиками, и они предпочитают (почти требуют. Хотя подрядчики не могут сменить подрядчиков, а такие вещи решают...) использовать Crypto API от Microsoft для шифрования строки.

Ну, честно говоря, AFAIK Я могу расшифровать это с помощью C#, но после бесконечных поисков я все еще не понимаю, как это работает.

Это означает, что я даже не могу предоставить пример кода, и я застрял в этой привязке, пока не смогу расшифровать эту строку.

Что у меня есть:

У меня есть общий пароль, который они шифруют, и я должен использовать, чтобы расшифровать его.

Настройки шифрования: "CALC_AES_128", хэш: "CALC_MD5". Строка зашифрована, затем хеширована.

Поэтому я хочу распаковать его и расшифровать.

Я знаю, это много, чтобы спросить, но как мне это сделать?

1 ответ

Решение

Ваш внешний подрядчик не знает, о чем он говорит.

Хеши используются как функция люка, способ распознать что-либо, не сказав, что это за штука. Это цифровой отпечаток. Способ создания хеша CRYPTOGRAPHICALLY SECURE означает, что даже с учетом хеша и алгоритма трудно создать объект, который соответствует отпечатку пальца.

AES - это недетерминированный шифр. Недетерминизм исходит из вектора инициализации, который каждый раз должен быть случайным числом (не жестко закодированным из броска кубика, хм, Sony). Это означает, что для всех намерений и целей вывод AES является чисто случайным (если у вас нет ключа). Хорошие шифры предназначены для получения статистически случайных данных (поэтому данных для атаки мало).

Таким образом, передавая данные в функцию, которая создает случайные данные, а затем помещая их в функцию "ловушки", вы производите что-то, что действительно трудно декодировать (сложно в этом смысле математически, вам действительно нужно больше энергии, чем существует во вселенной, чтобы вычислить это).

Что касается того, как передавать данные безопасным способом (безопасным как против любопытных глаз в незащищенной сети) в строке запроса? Существует хорошо известный протокол, который поддерживает.net, который делает это очень хорошо. Это называется HTTPS.

Другие вопросы по тегам