รหัสผ่านจะป้องกันไฟล์ gzip ในบรรทัดคำสั่งได้อย่างไร


130

ฉันต้องการสร้างไฟล์ tar.gz (และอาจเป็น tar.bz2) บางไฟล์โดยใช้คำสั่ง tar บน Ubuntu 10.04

ฉันต้องการรหัสผ่านเพื่อป้องกันไฟล์

คำสั่งให้ทำคืออะไร (ฉันมี Googled แต่ไม่พบสิ่งใดที่แสดงวิธีสร้างและคลายบีบอัดไฟล์โดยใช้รหัสผ่าน)

ใครรู้วิธีการทำเช่นนี้?

คำตอบ:


159

คุณต้องใช้ปรัชญา unix กับงานนี้: เครื่องมือหนึ่งสำหรับแต่ละงาน

การลอกและการบีบอัดเป็นงานสำหรับtarและgzipหรือbzip2crypto เป็นงานสำหรับอย่างใดอย่างหนึ่งgpgหรือopenssl:

การเข้ารหัสลับ

 % tar cz folder_to_encrypt | \
      openssl enc -aes-256-cbc -e > out.tar.gz.enc

ถอดรหัส

 % openssl enc -aes-256-cbc -d -in out.tar.gz.enc | tar xz

หรือใช้ gpg

 % gpg --encrypt out.tar.gz

openssl-variant ใช้การเข้ารหัสแบบ symetric คุณจะต้องแจ้งให้ฝ่ายที่รับทราบเกี่ยวกับ 'รหัสผ่าน' ที่ใช้ (หรือที่เรียกว่า 'the key') gpg-variant ใช้การรวมกันของการเข้ารหัสแบบ symetric และ asymetric คุณใช้กุญแจของฝ่ายที่ได้รับ (ซึ่งหมายความว่าคุณไม่จำเป็นต้องบอกรหัสผ่านใด ๆ ที่เกี่ยวข้องกับใคร) เพื่อสร้างกุญแจเซสชันและเข้ารหัสเนื้อหาด้วยกุญแจนั้น

หากคุณไปเส้นทาง zip (หรือ 7z): โดยพื้นฐานแล้วเป็นเช่นเดียวกับตัวแปร openssl คุณต้องแจ้งให้ฝ่ายรับทราบเกี่ยวกับรหัสผ่าน


26
สำหรับใครที่สงสัยว่าจะถอดรหัสไฟล์ด้วย openssl:openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz
ndbroadbent

1
@ nathan.f77 คำสั่งนั้นยังแสดงวิธีการทำสิ่งต่าง ๆ โดยไม่ต้องไพพ์ลงใน openssl openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc
Keith Smiley

3
@KeithSmiley ถ้าคุณมีคลังเก็บขนาดใหญ่และมีพื้นที่ไม่มาก (อย่างที่ควรจะเป็นใน VPS) มันจะมีประสิทธิภาพในการใช้พื้นที่มากขึ้น
Andrew Savinykh

ฉันไม่สามารถเรียกใช้สิ่งนี้ได้ในเครื่อง mac สิ่งนี้แตกต่างกันหรือไม่?
eleijonmarck

3
@eleijonmarck ระบุส่วน "ไม่ทำงานเนื่องจาก <insert-error-message-here>" ...
Akira

29

หากเจตนาของคุณคือเพียงป้องกันไฟล์ด้วยรหัสผ่านให้ใช้ยูทิลิตี้ zip มือผ่านบรรทัดคำสั่ง

zip -e <file_name>.zip <list_of_files>

-e ถามยูทิลิตี้ zip เพื่อเข้ารหัสไฟล์ที่กล่าวถึง

ตัวอย่างการทำงาน:

$ touch file_{0,1}.txt # creates blank files file_0 & file_1    
$ zip -e file.zip file_* # ask zip to encrypt
$ ENTER PASSWORD:
$ VERIFY PASSWORD:
$ ls file*

11
การเข้ารหัสไฟล์ Zip ไม่ปลอดภัย แต่อย่างใด
Kristopher Ives

4
@KristopherIves คุณสามารถอธิบายรายละเอียดเกี่ยวกับความไม่ปลอดภัยได้อย่างไร
tscizzle


4
@KristopherIves มันต้องใช้ "ไฟล์ ZIP อื่นที่มีไฟล์อย่างน้อยหนึ่งไฟล์จากไฟล์ที่เข้ารหัสในรูปแบบที่ไม่ได้เข้ารหัส " เพื่อให้ทำงานได้
Franklin Yu

4
"คุณต้องรู้เพียงส่วนหนึ่งของข้อความธรรมดา (อย่างน้อย 13 ไบต์)" สิ่งนี้ทำให้มีความเสี่ยงมากกว่าถ้าต้องการไฟล์ที่ไม่ได้เข้ารหัสทั้งหมด (ซึ่งค่อนข้างแย่อยู่แล้ว) นอกจากนี้การเข้ารหัสซิปยังไม่สามารถต้านทานการโจมตีด้วยกำลังดุร้าย (เช่นกับ Jack the Ripper) ไม่มีใครควรใช้มันเพื่ออะไรที่ร้ายแรง
EM0

21

นี่เป็นวิธีที่ทำได้ สิ่งหนึ่งที่ควรทราบคือถ้าคุณจะใช้เครื่องมือการบีบอัดและการเข้ารหัสแยกต่างหากคุณควรบีบอัดก่อนการเข้ารหัสเสมอเนื่องจากข้อมูลที่เข้ารหัสนั้นไม่สามารถบีบอัดได้

clear_textตัวอย่างเหล่านี้บีบอัดและเข้ารหัสไฟล์ที่เรียกว่า

การใช้ gpg

$ gpg -c clear_text #Compress & Encrypt
$ gpg -d clear_text.gpg #Decrypt & Decompress

gpg จะบีบอัดไฟล์อินพุตก่อนการเข้ารหัสโดยค่าเริ่มต้น-cหมายถึงการใช้การเข้ารหัสแบบสมมาตรด้วยรหัสผ่าน clear_text.gpgไฟล์ที่ส่งออกจะได้รับ ข้อดีอย่างหนึ่งของการใช้gpgคือใช้รูปแบบ OpenPGP มาตรฐานดังนั้นซอฟต์แวร์เข้ารหัสใด ๆ ที่สนับสนุน OpenPGP จะสามารถถอดรหัสได้

การใช้ mcrypt

$ mcrypt -z clear_text #Compress & Encrypt
$ mdecrypt -z clear_text.gz.nc #Decrypt & Decompress

-zบีบอัดตัวเลือก clear_text.gz.ncโดยค่าเริ่มต้นนี้เอาท์พุทไฟล์ที่เรียกว่า

การใช้ bcrypt

$ bcrypt -r clear_text #Compress & Encrypt
$ bcrypt -r clear_text.bfe #Decrypt & Decompress

bcrypt บีบอัดก่อนการเข้ารหัสโดยค่าเริ่มต้น-rตัวเลือกคือเพื่อให้ไฟล์อินพุตไม่ถูกลบในกระบวนการ ไฟล์เอาต์พุตถูกเรียกใช้clear_text.bfeโดยปริยาย

การใช้gzipและaespipe

$ cat clear_text | gzip | aespipe > clear_text.gz.aes #Compress & Encrypt
$ cat clear_text.gz.aes | aespipe -d | gunzip > clear_text #Decrypt & Decompress

aespipe คือสิ่งที่ดูเหมือนโปรแกรมที่รับอินพุตบน stdin และส่งออกข้อมูลที่เข้ารหัส aes บน stdout ไม่รองรับการบีบอัดดังนั้นคุณสามารถไพพ์อินพุตผ่าน gzip ก่อน เนื่องจากเอาต์พุตไปที่ stdout คุณจะต้องเปลี่ยนเส้นทางไปยังไฟล์ที่มีชื่อที่คุณเลือกเอง อาจไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งที่คุณถาม แต่ aespipe เป็นเครื่องมือที่ใช้งานได้หลากหลายดังนั้นฉันคิดว่ามันคุ้มค่าที่จะพูดถึง


15

คุณสามารถใช้ 7zip เพื่อสร้างที่เก็บรหัสผ่านป้องกันของคุณ คุณสามารถระบุรหัสผ่านในบรรทัดคำสั่ง (หรือในสคริปต์) ด้วยวิธีต่อไปนี้:

7z a -p<password> <someprotectedfile>.7z file1.txt file2.txt

7zip ยังสามารถอ่านจาก STDIN ดังต่อไปนี้:

cat <somefile> | 7z a -si -p<password> <someprotectedfile>.7z

หากจำเป็นต้องใช้ไฟล์ zip คุณอาจต้องการใช้-t<type>พารามิเตอร์ (เช่น-tzip)


5
ฉันเลือกคำตอบนี้เป็นคำตอบเดียวเพราะมันเป็นคำตอบเดียว คำถามไม่ใช่วิธีการเข้ารหัสข้อความ แต่เป็นวิธีการป้องกันด้วยรหัสผ่านในการเก็บถาวร นั่นคือทั้งหมดที่ฉันต้องทำ (Gmail ถูกปิดกั้นการสำรองข้อมูลเซิร์ฟเวอร์ของฉันเพราะมันตัดสินใจที่มีอะไรบางอย่างที่ไม่ปลอดภัยในเอกสารแนบและฉันเพียงต้องการที่จะเพิ่มรหัสผ่าน แต่ไม่ได้มีเพื่อความปลอดภัย..)
felwithe

7

tar, gzip และ bzip2 ไม่สนับสนุนการป้องกันด้วยรหัสผ่าน ใช้รูปแบบการบีบอัดที่ทำเช่น zip หรือเข้ารหัสด้วยเครื่องมืออื่นเช่น GnuPG


อ่านั่นอธิบายว่าทำไมฉันไม่พบอะไรออนไลน์ ฉันคิดว่าฉันจะไปเพื่อซิป
morpheous

Gah !, ฉันพยายาม zip ไดเรกทอรีซ้ำด้วย passwors และมันจะสร้างไฟล์ zip โดยใช้ชื่อ foobar เป็นไดเรกทอรี (ว่าง) ในนั้น นี่คือคำสั่งที่ฉันใช้: zip -e foobar.zip foobar foobar เป็นโฟลเดอร์ที่ไม่ว่างเปล่าในไดเรกทอรีปัจจุบัน
morpheous

4
เหมือนที่ผู้ชายพูด-r.
Ignacio Vazquez-Abrams

5

สร้างด้วย:

tar czvf - directory | gpg --symmetric --cipher-algo aes256 -o passwordprotectedarchive.tar.gz.gpg

มันจะขอรหัสผ่านจากคุณ

ถอดรหัสด้วย:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.