Як швидко зашифрувати файл за допомогою AES?


81

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

Відповіді:


86

На жаль, не існує простого рішення для забезпечення своїх речей. Подумайте про свій варіант використання, можливо, щось краще, ніж звичайний AES, краще підходить.


Якщо ви хочете дуже простого незалежного шифрування платформи, ви можете використовувати openssl .

Зверніть увагу: Ви можете використовувати це, щоб приховати подарунок на день народження-ідеї.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 байтами! Якщо ви збираєтеся передавати файли з кимось іншим, ваш спільний секрет повинен бути дуже сильним. Ви можете використовувати цей сайт, щоб зрозуміти, наскільки хороший ваш пароль:

Попередження: Я перевірив, що ці сайти не надсилають ваш пароль на сервер, але це може змінитися в будь-який час. Використовуйте ці сайти за допомогою інструментів розробника / інспектора і перевірте, чи вони щось надсилають, перш ніж вводити надійний пароль.


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 із зворотним, як ви очікували.
belacqua

1
Немає жодних причин віддавати перевагу AES 256 перед AES 128. @ Лекенштейн Ніколи не використовуйте ЄЦБ для конфіденційних даних - в основному ЄЦБ ніколи не слід використовувати (лише для експертів: ЄЦБ ніколи не слід використовувати, за винятком деяких дуже конкретних випадків). Більш загально, інструмент 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 за замовчуванням. (За даними сторінки, це CAST5 )


Ви також можете використовувати AES(означає AES-128). AES-128 трохи швидший і не менш безпечний.
Жиль

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

Як я можу запобігти gpgкешування паролем?
користувач76284

16

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

Встановіть його ( p7zip-full), клацніть правою кнопкою миші на файл або каталог, який ви хочете зашифрувати, та оберіть Compress , .7z та інші параметри / пароль .

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

Для розшифрування натисніть правою кнопкою миші на .7z файл і виберіть тут Витягнути .


1
Як запустити графічний інтерфейс на 7z?
m0skit0

4

ескрипт

Пов'язаний веб-сайт містить 256-розрядний інструмент шифрування / розшифрування AES з відкритим кодом і є багатоплатформою - MacO, Windows, Linux та інші через Java.

Шифрувати: aescrypt -e <file>

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

Ви можете створити резервну копію та зашифрувати домашню папку за допомогою синтаксису:

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

установка ubuntu

Завантажте та витягніть джерело

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-файл буде містити зашифровану (і виконану, якщо це сценарій) версію вашого файлу. Це дозволяє " легко " та " зручно " шифрувати файл / скрипт, не задовольняючи жодних вимог щодо пакету чи модуля в кожній системі, для якої ви маєте намір використовувати сценарій, або виконувати декілька складних та заплутаних закликів команд 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-sushi

1

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

Він aes256 зашифрує файл, а потім base64 кодує його. Роблячи реверс, він буде базовим64 розшифровувати, розшифровувати, а потім виплювати початковий простий текст.

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.