ฉันจะเข้ารหัสไฟล์อย่างรวดเร็วด้วย AES ได้อย่างไร


81

ฉันต้องการเข้ารหัสไฟล์โดยใช้ AES-256 ฉันจะทำสิ่งนั้นอย่างรวดเร็วและง่ายดายและฉันจะ - หรือคนอื่น ๆ - เข้ารหัสอีกครั้งได้อย่างไร

คำตอบ:


86

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


หากคุณต้องการการเข้ารหัสแพลตฟอร์มอิสระที่ง่ายมากที่คุณสามารถใช้OpenSSL

โปรดทราบ: คุณสามารถใช้สิ่งนี้เพื่อซ่อน birthday-gift-ideas.txt จากเพื่อนร่วมห้องของคุณ แต่อย่าคาดหวังว่ามันจะปลอดภัยต่อผู้โจมตีที่มุ่งมั่น!

  1. ดังที่ได้กล่าวไว้ในความคิดเห็นวิธีนี้ใช้ฟังก์ชั่นการรับรหัสที่ไร้เดียงสาดังนั้นรหัสผ่านของคุณจะต้องดีอย่างยิ่งยวดเพื่อให้คุณมีโอกาสได้รับความปลอดภัย
  2. นอกจากนี้วิธีนี้ไม่ได้ตรวจสอบ ciphertext ซึ่งหมายความว่าผู้โจมตีสามารถแก้ไขหรือทำให้เนื้อหาเสียหายโดยที่คุณไม่สังเกตเห็น
  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 เหล่านี้เป็นโหมด ciphers ที่คุณมีอยู่ (นับ 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 / ผู้ตรวจสอบและตรวจสอบว่าพวกเขาส่งอะไรก่อนพิมพ์รหัสผ่านที่รัดกุมของคุณ


9
openssl aes-256-cbcสั้นกว่าopenssl enc -aes-256-cbcและใช้งานได้เช่นกัน man encหน้าคู่มือสำหรับการนี้สามารถใช้ได้โดยการทำงาน ไม่เคยใช้ข้อมูลที่ไม่ควรจะมีอารมณ์กับมักจะใช้ecb ซ้ำซ้อนเนื่องจากเป็นค่าเริ่มต้น หากคุณไม่ใช้งานเอาต์พุตจะถูกเขียนไปยังเอาต์พุตมาตรฐานซึ่งมีประโยชน์หากคุณต้องการวิเคราะห์ข้อมูล แต่ไม่เขียนลงดิสก์ คำสั่งถัดไปแสดง Cound บรรทัดสำหรับเท็กซ์: (ใช้อื่นอ่านไฟล์: )cbc-salt-out filenameopenssl aes-256-cbc -d -in filename | wc -lopenssl 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 @Lekensteyn ไม่เคยใช้ ECB สำหรับข้อมูลลับเช่นกัน - โดยทั่วไป ECB ไม่ควรใช้ (สำหรับผู้เชี่ยวชาญเท่านั้น: ECB ไม่ควรใช้ยกเว้นในบางกรณีที่เฉพาะเจาะจงมาก) โดยทั่วไปopensslเครื่องมือบรรทัดคำสั่งส่วนใหญ่เป็นหลักฐานพิสูจน์แนวคิดสำหรับการทดสอบไลบรารี OpenSSL คำตอบที่เหมาะสมสำหรับคำถามนี้เป็นทั้งจีพีจีหรือ Archiver บางอย่างเช่น7z
Gilles

1
ฉันต้องการเพิ่มที่openssl encจริงแล้วไม่ปลอดภัยหากคุณมีรหัสผ่านที่อ่อนแอ ก่อนหน้านี้ฉันแนะนำการใช้งานบางอย่างopenssl encแต่ตอนนี้แนะนำให้ใช้gpgแทนเพราะใช้ KDF ในวิธีที่ดีกว่า ดูคำตอบนี้
Lekensteyn

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 นั้นเร็วกว่าเล็กน้อยและไม่ปลอดภัยน้อยกว่า
Gilles

2
+1 นอกจากนี้โปรดทราบว่า GnuPG ยังมีการตรวจสอบข้อความ (HMAC) สำหรับคุณเมื่อใช้ AES (ซึ่ง OpenSSL ขาดคำตอบ upvoted มากที่สุดในขณะที่เขียน) ข้อมูลความเป็นมา: superuser.com/a/633716/157409
gertvdijk

ฉันจะป้องกันไม่ให้gpgแคชรหัสผ่านได้อย่างไร
user76284

16

7z (เมื่อใช้ตัวเลือกรหัสผ่าน ) ใช้การเข้ารหัส AES 256 บิต (ด้วยการยืดคีย์ SHA256 )

ติดตั้ง ( p7zip-full) คลิกขวาที่แฟ้มหรือไดเรกทอรีที่คุณต้องการในการเข้ารหัสและเลือกการบีบอัด , .7zและตัวเลือกอื่น ๆ / รหัสผ่าน

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับการถอดรหัสคลิกขวาที่.7zไฟล์และเลือกสารสกัดจากที่นี่


1
คุณจะเปิด GUI สำหรับ 7z ได้อย่างไร
m0skit0

4

aescrypt

เว็บไซต์ที่เชื่อมโยงมีเครื่องมือเข้ารหัส / ถอดรหัส aes โอเพนซอร์ซ 256-bit และเป็นแพลตฟอร์มที่หลากหลาย - MacOs, 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 ทุกรุ่นในบางแพลตฟอร์ม OS ที่ใหม่กว่าส่วนใหญ่ ... เช่น Linux มีอยู่ แต่คนอื่นเช่น AIX 5.3 ไม่ได้ (ฉันคิดว่า HP-UX เช่นกัน) หากคุณตั้งใจจะใช้ไฟล์หรือสคริปต์ของคุณข้ามแพลตฟอร์มที่แตกต่างกันฉันขอแนะนำให้ใช้AES-128เพราะมีให้บริการทุกที่

คุณจะ "เข้ารหัสไฟล์ได้อย่างรวดเร็วและง่ายดายโดยใช้ AES-128 ได้อย่างไร?

เว็บไซต์อย่างwww.ShellScrypt.comใช้ openssl AES-128 ค่อนข้างเข้มงวดในการเข้ารหัสเชลล์สคริปต์จากนั้นสร้างสำเนาที่เข้ารหัสของสคริปต์ที่สามารถเรียกใช้งานได้ สิ่งที่คุณต้องทำคือวางสคริปต์ลงในเว็บไซต์และไฟล์ซิปจะถูกสร้างขึ้นสำหรับคุณ ไฟล์ซิปนั้นจะมีเวอร์ชันไฟล์เข้ารหัสของคุณ (และสามารถเรียกใช้งานได้หากเป็นสคริปต์) สิ่งนี้ช่วยให้คุณสามารถ " เข้ารหัสไฟล์ / สคริปต์" ได้อย่างง่ายดาย "และ" สะดวก "โดยไม่ต้องทำตามข้อกำหนดของแพ็กเกจหรือโมดูลในทุกระบบที่คุณตั้งใจจะใช้สคริปต์บนหรือเรียกใช้ซับซ้อนหรือสับสน

แสดงด้านล่างเป็นคำสั่งการเข้ารหัส / ถอดรหัส 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

เมื่อเพิ่มคำตอบของ Stefano Palazzo ฉันได้สร้างฟังก์ชั่นทุบตีเล็ก ๆ ที่ทำงานคล้ายกับคำสั่ง 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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.