Я хочу зашифровать файл, используя AES-256. Как я могу сделать это быстро и легко, и как я - или кто-то еще - расшифровать это снова?
Я хочу зашифровать файл, используя AES-256. Как я могу сделать это быстро и легко, и как я - или кто-то еще - расшифровать это снова?
Ответы:
К сожалению, нет простого решения для защиты ваших вещей. Подумайте о своем сценарии использования, может быть, лучше подходит что-то иное, чем простой AES.
Если вы хотите очень простое независимое от платформы шифрование, вы можете использовать openssl .
Если вы все еще хотите использовать 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 и проверьте, отправляют ли они что-нибудь, прежде чем вводить надежный пароль.
/usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc
с обратным, как и следовало ожидать.
openssl
инструмент командной строки в основном является проверкой концепции для тестирования библиотеки OpenSSL. Правильный ответ на этот вопрос - либо GPG, либо какой-нибудь архиватор, такой как 7z .
openssl enc
на самом деле это не так безопасно, если у вас слабый пароль. Ранее я рекомендовал определенное использование openssl enc
, но теперь предлагаю использовать gpg
вместо этого, потому что он использует KDF лучше. Смотрите этот ответ .
Мне нравится использовать 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 немного быстрее и не менее безопасен.
gpg
кеширование пароля?
7z (когда используется опция пароля ) использует 256-битное шифрование AES (с растяжением ключа SHA256 ).
Установите его ( p7zip-full
), щелкните правой кнопкой мыши файл или каталог, который хотите зашифровать, и выберите « Сжать» , « .7z» и « Другие параметры / Пароль» .
Для дешифрования щелкните правой кнопкой мыши файл .7z и выберите « Извлечь здесь» .
Связанный веб-сайт содержит 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
Загрузите двоичные файлы или исходный код с сайта.
Многие из предложений, которые я бы сделал, уже были изложены в этой теме. По сути, 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:~$
Добавляя к ответу Стефано Палаццо, я создал небольшую функцию 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.
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
)