Я пытаюсь зашифровать файл с использованием открытого ключа crypto с OpenSSL. Я знаю достаточно, чтобы знать, что для файла любого разумного размера это не может/не должно быть сделано с помощью открытого ключа. Вместо этого:Зашифровать файл открытым ключом с помощью openssl EVP-подпрограмм
1) Генерация случайного ключа (например, 256 бит)
2) Зашифровать ключ с открытым ключом
3) Симметричным Зашифровать файл со случайным ключом (1), например, AES
4) Join (2) и (3) вместе
5) Отправить (4), где/кто
Этот процесс воспроизведен в EVP подпрограмм OpenSSL как «конверт ЭЯКР yption». Мне удалось реализовать программу расшифровки/шифрования, используя этот API в C, который отлично работает :)
Мне интересно, можете ли вы выполнить этот процесс непосредственно через команды OpenSSL, а не через API низкого уровня. Я пробовал и могу генерировать случайный ключ, шифровать файл и т. Д. Затем я застреваю при объединении двух файлов вместе - на данный момент я просто cat
два вместе, но это, похоже, не работает. Это возможно?
Спасибо за ответы. user4718374 - вы хорошо подытожили, где мне удалось добраться до сих пор, но конкатенация ключа и файла - это то место, где я тоже застрял. Maarten - CMS выглядит интересно, знаете ли вы, будет ли это работать с функцией EVP_Open для расшифровки на другом конце? – user4005750
Конкатенация не проблема.Разделение файлов. Но поскольку ваш ключ является постоянной длиной, и AES, похоже, не изменяет эту длину, вы можете просто сделать «ekey ekey», а другая сторона может просто получить ekey (я использую префикс e для обозначения зашифрованного) путем извлечения первые 256 байтов из конкатенированного файла, а остальные будут зашифрованным файлом (например, вы можете сделать это с помощью dd). – PSkocik
@ user4005750 Я бы продолжал использовать CMS полностью. CMS доступен как для командной строки, так и для API (конечно, поскольку OpenSSL - это библиотека сначала и CLI позже). –