Как быстро зашифровать файл с помощью AES?


81

Я хочу зашифровать файл, используя AES-256. Как я могу сделать это быстро и легко, и как я - или кто-то еще - расшифровать это снова?

Ответы:


86

К сожалению, нет простого решения для защиты ваших вещей. Подумайте о своем сценарии использования, может быть, лучше подходит что-то иное, чем простой AES.


Если вы хотите очень простое независимое от платформы шифрование, вы можете использовать openssl .

Обратите внимание: вы можете использовать это, чтобы скрыть birthday-gift-ideas.txt от своего соседа по комнате, но не ожидайте, что он будет защищен от решительного злоумышленника!

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

Если вы все еще хотите использовать 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 -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=

Обратите внимание, что у вас есть выбор шифров и режимов работы. Для нормального использования я рекомендую AES 256 в режиме CBC. Доступны следующие режимы шифрования (только подсчет AES):

aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb

Смотрите также:

Пожалуйста, обратите внимание:

OpenSSL попросит вас ввести пароль. Это не ключ шифрования, он не ограничен 32 байтами! Если вы собираетесь передавать файлы кому-то еще, ваш общий секрет должен быть очень надежным. Вы можете использовать этот сайт, чтобы понять, насколько хорош ваш пароль:

Предупреждение: я проверил, что эти сайты не отправляют ваш пароль на сервер, но это может измениться в любое время. Используйте эти сайты с dev tools / inspector и проверьте, отправляют ли они что-нибудь, прежде чем вводить надежный пароль.


9
openssl aes-256-cbcкороче openssl enc -aes-256-cbcи тоже работает. Страница справочника для этого доступна при запуске man enc. Никогда не используйте ecbдля данных, которые не должны быть изменены, всегда используйте cbc. -saltизбыточно, так как это по умолчанию. Если вы пропустите, -out filenameвывод будет записан в стандартный вывод, что полезно, если вам просто нужно анализировать данные, а не записывать их на диск. Следующая команда , показывает cound линии для открытого текста: openssl aes-256-cbc -d -in filename | wc -l. (другое использование, чтение файла: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
Я почти точно использую это в сценарии: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc с обратным, как и следовало ожидать.
Белаква

1
Нет оснований предпочитать AES 256 AES 128. @Lekensteyn Никогда также не используйте ECB для конфиденциальных данных - в основном ECB никогда не следует использовать (только для экспертов: ECB никогда не следует использовать, за исключением некоторых очень специфических случаев). В более общем смысле, opensslинструмент командной строки в основном является проверкой концепции для тестирования библиотеки OpenSSL. Правильный ответ на этот вопрос - либо GPG, либо какой-нибудь архиватор, такой как 7z .
Жиль

1
Я хотел бы добавить, что openssl encна самом деле это не так безопасно, если у вас слабый пароль. Ранее я рекомендовал определенное использование openssl enc, но теперь предлагаю использовать gpgвместо этого, потому что он использует KDF лучше. Смотрите этот ответ .
Лекенштейн

2
-1 Для рекомендации использования низкоуровневого OpenSSL. Он не предоставляет никаких функций HMAC и, как указывает @Lekensteyn, ему не хватает KDF.
gertvdijk

26

Мне нравится использовать 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 это CAST5 )


Вы также можете использовать AES(имеется в виду AES-128). AES-128 немного быстрее и не менее безопасен.
Жиль

2
+1. Также обратите внимание, что GnuPG также обеспечивает аутентификацию сообщений (HMAC) для вас при использовании AES (чего не хватает OpenSSL, так как он является наиболее востребованным ответом на момент написания). Справочная информация: superuser.com/a/633716/157409
gertvdijk

Как я могу предотвратить gpgкеширование пароля?
user76284

16

7z (когда используется опция пароля ) использует 256-битное шифрование AES (с растяжением ключа SHA256 ).

Установите его ( p7zip-full), щелкните правой кнопкой мыши файл или каталог, который хотите зашифровать, и выберите « Сжать» , « .7z» и « Другие параметры / Пароль» .

введите описание изображения здесь

Для дешифрования щелкните правой кнопкой мыши файл .7z и выберите « Извлечь здесь» .


1
Как запустить графический интерфейс для 7z?
m0skit0

4

aescrypt

Связанный веб-сайт содержит 256-битный инструмент шифрования / дешифрования с открытым исходным кодом и является мультиплатформенным - MacO, Windows, Linux и другие через Java.

Шифрование: aescrypt -e <file>

Расшифровать: aescrypt -d <file>

Вы можете сделать резервную копию и зашифровать вашу домашнюю папку, используя синтаксис:

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

установка убунту

Скачайте и распакуйте исходный код

make
sudo make install

другие платформы

Загрузите двоичные файлы или исходный код с сайта.


3

Многие из предложений, которые я бы сделал, уже были изложены в этой теме. По сути, 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 mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$ 
test@test-VirtualBox:~$

2
Просто оставив комментарий, чтобы предупредить, что «shellscrypt.com» не работает (иначе: сайт пропал).
e-суши

1

Добавляя к ответу Стефано Палаццо, я создал небольшую функцию bash, которая работает аналогично команде base64.

Он зашифрует файл, а затем закодирует 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 string

aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password

aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.