Як використовувати аргумент пароля в командному рядку для openssl для розшифровки


54

Тому не найбезпечніша практика передавати пароль через аргумент командного рядка. Однак, документація на openssl збентежила мене про те, як передати аргумент пароля команді openssl.

Ось що я намагаюся зробити

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

Потім буде запропоновано ключ пропуску для розшифровки. Я шукав документи opensl та інтервебелі, щоб спробувати знайти відповідь, якщо я просто хотів дати пароль команді, не намагаючись повторити пароль у файл. Я намагався додавати, -pass:somepasswordі -pass somepasswordз і без лапок безрезультатно.

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

Примітка: я використовую openssl версії 0.9.8y

Відповіді:


108

Документація була не дуже зрозумілою для мене, але вона мала відповідь, і завдання було не в змозі побачити приклад.

Ось як це зробити:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

Зауважте, що за синтаксисом командного рядка командного рядка завжди -passйде пробіл, а потім тип парольної фрази, яку ви надаєте, тобто pass:для простої парольної фрази, а потім фактичної парольної фрази після двокрапки без пробілу.

Додатково в документації зазначено, що ви можете надати інші джерела парольної фрази, виконавши наступні дії:

  • env:somevar щоб отримати пароль від змінної середовища
  • file:somepathname щоб отримати пароль з першого рядка файлу за адресою pathname
  • fd:number щоб отримати пароль від номера дескриптора файлу.
  • stdin читати зі стандартного вводу

Тепер, коли я написав це питання та відповідь, все здається очевидним. Але це, безумовно, потребувало певного часу, щоб зрозуміти, і я бачив, що це потребує інших подібний час, тому, сподіваємось, це може скоротити цей час і швидше відповісти на інших! :)

З OpenSSL 1.0.1e параметром, який слід використовувати, є -passinабо -passout. Отож цей приклад:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword


Яка різниця між використанням passin або passout? - Га! Просто подивився, stdin vs stdout звичайно!
dtmland

Зауважте, що документація щодо параметрів пароля, що застосовується до більшості openssl команд (не тільки enc), знаходиться на головній сторінці для openssl (1) також в Інтернеті в розділі "ОПЦІЇ". Але я не вірю вашому останньому шматочку про -passin / out; інші openssl команди на зразок rsa dsa ec pkey pkcs8 pkcs12 req caвикористовують ці, але в кожній я бачив версію, включаючи 1.0.1e, побудований безпосередньо з encвикористання джерела потоку -passабо -k -kfileяк задокументовано (на сторінці сторінки enc).
dave_thompson_085

Як щодо openssl dgstкоманди? Як ввести пароль для цього в командному рядку?
frakman1

4
btw -passinвикористовується для введення пароля для вхідного сертифіката, а -passoutдля нового генерованого сертифіката
drmad

7

Я використовував -passinта -passoutвстановлював паролі для обох файлів у прикладі:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

де 123і 321є паролем


5

У цей момент Ubuntu 14.04 LTS поставляється з openssl 1.0.1f-1ubuntu2.16

У цій версії використовується параметр, який слід використовувати -k

Приклад:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword

1
у вашому прикладі -k є опцією, доступною для команди openssl 'enc' (спробуйте man enc), це не загальний варіант. Якщо ви подивитеся, man opensslви побачите під заголовком "Параметри фразової фрази", що таке загальні параметри; pass:password, env:var, file:pathname, fd:numberАбо stdin, як згадувалося в попередній відповіді.
sibaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.