Я хочу зашифровать файл с помощью AES-256. Как я могу сделать это быстро и легко, и как я - или кто-то другой - могу расшифровать его снова?
К сожалению, простого решения для обеспечения безопасности ваших вещей не существует. Подумайте о своем варианте использования, возможно, лучше подойдет что-то другое, кроме простого AES.
- Используйте менеджер паролей, например Брелок для ключей для паролей
- Зашифруйте свой домашний каталог (очень легко сделать с помощью установщика Ubuntu)
- Используйте GPG если вы хотите безопасно общаться по электронной почте
- OTR с помощью пиджина если вам нужен безопасный обмен мгновенными сообщениями
- Используйте Cryptocat для безопасного чата
Если вам нужно очень простое независимое от платформы шифрование, вы можете использовать openssl.
Пожалуйста, обратите внимание: Вы можете использовать это, чтобы скрыть birthday-gift-ideas.txt от вашего соседа по комнате, но не ожидайте, что он будет защищен от решительного злоумышленника!
- Как было указано в комментариях, этот метод использует наивную функцию получения ключа, поэтому ваш пароль должен быть превосходным, чтобы у вас был шанс быть в безопасности.
- Кроме того, этот метод не проверяет подлинность зашифрованного текста, что означает, что злоумышленник может изменить или повредить содержимое без вашего ведома.
- Для многих типов безопасности шифрования просто недостаточно (например, вы не можете просто использовать шифрование для безопасного обмена данными).
Если вы все еще хотите использовать openssl:
-
Шифрование:
openssl aes-256-cbc -in attack-plan.txt -out message.enc
-
Расшифровка:
openssl aes-256-cbc -d -in message.enc -out plain-text.txt
Вы можете получить openssl для base64
-закодируйте сообщение с помощью -a
включите как шифрование, так и дешифрование. Таким образом, вы можете вставить зашифрованный текст, например, в сообщение электронной почты. Это будет выглядеть примерно так:
stefano:~$ openssl aes-256-cbc -in attack-plan.txt -aenter aes-256-cbc encryption password:Verifying - enter aes-256-cbc encryption password:U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=
Обратите внимание, что у вас есть выбор шифров и режимов работы. Для обычного использования я рекомендую aes 256 в режиме CBC. Это доступные вам режимы шифрования (только с учетом AES).:
aes-128-cbc ← this is okayaes-128-ecbaes-192-cbcaes-192-ecbaes-256-cbc ← this is recommendedaes-256-ecb
Смотрите также:
- http://en.wikipedia.org/wiki/Symmetric-key_algorithm
- http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
Пожалуйста, обратите внимание:
OpenSSL запросит у вас пароль. Это не ключ шифрования, он не ограничен 32 байтами! Если вы собираетесь передавать файлы с кем-то другим, ваш общий секрет должен быть очень надежным. Вы можете использовать этот сайт, чтобы получить представление о том, насколько хорош ваш пароль:
- https://www.grc.com/haystack.htm (это не учитывает никаких атак по словарю!)
- http://howsecureismypassword.net (это, по крайней мере, проверка на наличие общих паролей)
Предупреждение: Я проверил, что эти сайты не отправляют ваш пароль на сервер, но он может измениться в любое время. Используйте эти сайты с помощью dev tools / inspector и проверьте, отправляют ли они что-нибудь, прежде чем вводить свой надежный пароль.
Мне нравится использовать gpg
команда:
Зашифровать:
gpg --cipher-algo AES256 --symmetric filename.tar.gz
Стенография:
gpg --cipher-algo AES256 -c filename.tar.gz
При этом будет запрошена кодовая фраза.
Расшифровать:
gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg
Стенография:
gpg -o filename.tar.gz -d filename.tar.gz.gpg
Вы также можете добавить cipher-algo AES256
к ~/.gnupg/gpg.conf
чтобы сделать AES256 по умолчанию. (Согласно manpage, это БРОСОК5)
7z (когда в пароль используется опция) использует 256-битное шифрование AES (с SHA256 растяжение ключа).
Установите его (p7zip-full
), щелкните правой кнопкой мыши на файле или каталоге, который вы хотите зашифровать, и выберите Сжимать, .7z и Другие варианты /Пароль.
Для расшифровки щелкните правой кнопкой мыши на .7z файл и выберите Извлечение здесь.
aescrypt
Связанный веб-сайт содержит 256-битный инструмент шифрования / дешифрования aes с открытым исходным кодом и является мультиплатформенным - macOS, Windows, Linux и другие через Java.
Зашифровать: aescrypt -e <file>
Расшифровать: aescrypt -d <file>
Вы можете создать резервную копию и зашифровать свою домашнюю папку, используя синтаксис:
tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes
установка ubuntu
Загрузите и извлеките исходный код
makesudo make install
другие платформы
Загрузите двоичные файлы или исходный код с веб-сайта.
Многие предложения, которые я бы сделал, уже были высказаны в этой теме. По сути, openssl - это действительно самый простой способ шифрования файла или скрипта. Однако я бы предостерег от использования AES-256 просто потому, что он доступен не во всех версиях openssl на некоторые платформы. Это есть в большинстве новых операционных систем ... то есть в Linux. Но другие, такие как AIX 5.3, этого не делают (я думаю, что и HP-UX тоже). Если вы собираетесь использовать свой файл или скрипт на разных платформах, я настоятельно рекомендую использовать AES-128 потому что это доступно везде.
Как вы можете "быстро и легко" зашифровать файл с помощью AES-128?
Такой сайт, как www.ShellScrypt.com довольно интенсивно использует openssl AES-128 для шифрования сценариев оболочки, а затем делает зашифрованные копии скриптов исполняемыми. Все, что вам нужно сделать, это вставить скрипт на сайт, и для вас будет сгенерирован zip-файл. Этот zip-файл будет содержать зашифрованную (и исполняемую, если это скрипт) версию вашего файла. Это позволяет вам "легко" и "удобно" зашифруйте файл / скрипт без необходимости удовлетворять каким-либо требованиям к пакету или модулю в каждой системе, в которой вы собираетесь использовать скрипт, или запустите несколько сложных и запутанных заклинаний команд openssl.
Ниже показан базовый шифрование / дешифрование openssl команда, использующая AES-128:
test@test-VirtualBox:~$ test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypasswordU2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314ztest@test-VirtualBox:~$test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypasswordprecious-contenttest@test-VirtualBox:~$ test@test-VirtualBox:~$
Упоминание последней опции, добавленной в openssl
начиная с OpenSSL 1.1.0. Основываясь на ответе стефано-палаццо:
openssl enc -aes-256-cbc -a -e -in input.tar.gz -out oupput.enc -pbkdf2 -iter 1000000 -md sha512
Он использует Функция Вывода Ключа, отсутствие этого значительно упростило бы брутфорсинг пароля.
Для дешифрования используйте:
openssl enc -aes-256-cbc -a -d -in output.tar.xz.enc -out output.tar.xz -pbkdf2 -iter 1000000 -md sha512
Объяснение аргументов:enc
расшифровывается как шифрование-aes-256-cbc
является хороший способ об использовании AES
шифр-a
base64 ваши данные после шифрования или перед расшифровкой-d
расшифровать-e
зашифровать-in
входной файл-out
выходной файл-pbkdf2
полосы, ключ к которым было бы трудно сломать Функция Вывода Ключа-iter
итераций для расширения ключа, чем больше, тем больше безопасности и описано достаточное количество здесь-md sha512
заменяет хэш-функцию PBKDF2 на SHA512, которая более безопасна, чем SHA256 по умолчанию-salt
не упоминается в команде, потому что она установлена по умолчанию и является очень хорошим способом повышения безопасности, почему это описано здесь
В дополнение к ответу Стефано Палаццо я создал небольшую функцию bash, которая работает аналогично команде base64.
Он будет aes256 шифровать файл, а затем base64 кодировать его. При выполнении обратного действия он будет декодировать base64, расшифровывать, а затем выдавать исходный открытый текст.
aes256() { decodeMe="" isPipe="$([ ! -t 0 ] && echo "true" || echo "false")" if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then decodeMe="-d" shift fi if [ "$isPipe" = "true" ]; then read input printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe exitCode="$?" else openssl aes-256-cbc -a $decodeMe -in "$*" exitCode="$?" fi unset isPipe decodeMe input return "$exitCode"}
Использование:
echo "my string" | aes256# enter aes-256-cbc encryption password# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d# enter aes-256-cbc decryption password# Returns: my stringaes256 file.plain > file.crypt# enter aes-256-cbc encryption passwordaes256 -d file.crypt# enter aes-256-cbc decryption password# Spits out original unencrypted file.