#c# #.net #windows #cryptography #cng
#c# #.net #Windows #криптография #cng
Вопрос:
Я создаю этот инструмент на C #, который возьмет файл .gpg и расшифрует его с помощью Windows CNG. Я получаю файл .gpg в качестве входного параметра, и он зашифрован моим ключом с помощью WinPT. Его расшифровка выполняется с помощью этого инструмента, и я также могу расшифровать с помощью BouncyCastle и моего секретного ключа. У принимающей стороны файла всегда будут права / ключ для его расшифровки (это предположение). Мы больше не хотим использовать секретный ключ, но вместо этого хотели бы использовать ключ из Windows CNG Store ИЛИ класса ProtectedData (предпочтительно).
Я проверил этот пост, где более или менее объясняется, как работает шифрование и дешифрование с использованием Unprotect и Protect, но я не могу заставить его работать, когда входным файлом является .gpg. Он работает с массивами байтов, и преобразование данных .gpg в массив байтов также не помогает.
Возможно ли вообще расшифровать файл .gpg с помощью этого метода?
Комментарии:
1. Да: CNG — это файл, созданный CryptoNG, программой, используемой для создания зашифрованных архивов. Он включает алгоритм шифрования AES-256 и требует пароля для того, чтобы расшифровать архив обратно в исходный набор файлов. Библиотека Net использует алгоритм шифрования AES-256, и пока у вас есть ключи, вы должны быть в состоянии расшифровать.
2. @jdweng в этом случае, работая с классом CngKey в .net, мне все равно понадобился бы секретный ключ? Это единственное, чего я хотел бы избежать — так что что-то в направлении класса ProtectedData
3. При шифровании всегда нужен ключ. Вопрос в количестве ключей и в том, где хранятся ключи. Вы могли бы попросить службу предоставить ключ, но тогда вам все равно нужен безопасный способ подключения к серверу, такой как использование сертификата или помещение ключа шифрования в сертификат.
4. Допустим, Джон зашифровал файл с помощью WinPT на своем ноутбуке. Затем он загружает его в папку на каком-то сервере. Когда он загружает инструмент, также загружается соответствующий зашифрованный файл, который он ранее загрузил. У него нет секретного ключа на компьютере, на котором он находится в данный момент, по крайней мере, не экспортирован. Поэтому он должен быть сохранен где-нибудь в реестре / контейнере компьютера. Возможно ли расшифровать файл без экспортированного секретного ключа? Чтобы программа c # знала, какой ключ взять из хранилища ключей Windows, и расшифровала его таким образом. TL; DR: Зашифровать с помощью WinPT, расшифровать с помощью ProtectedData / CNG
5. Вот почему я сказал использовать сертификат и / или обернуть его в SOAP. Я сказал использовать ключ (ы). У вас могут быть закрытые и открытые ключи. Таким образом, вы можете шифровать / расшифровывать с помощью открытых ключей, которые не требуют секретных ключей, или закрытых ключей с использованием секретного ключа.