Tôi muốn mã hóa một tập tin bằng AES-256. Làm thế nào tôi có thể làm điều đó một cách nhanh chóng và dễ dàng, và làm thế nào tôi có thể - hoặc người khác - mã hóa lại nó?
Tôi muốn mã hóa một tập tin bằng AES-256. Làm thế nào tôi có thể làm điều đó một cách nhanh chóng và dễ dàng, và làm thế nào tôi có thể - hoặc người khác - mã hóa lại nó?
Câu trả lời:
Thật không may, không có giải pháp dễ dàng để đảm bảo công cụ của bạn. Hãy suy nghĩ về trường hợp sử dụng của bạn, có thể một cái gì đó khác với AES đơn giản là phù hợp hơn.
Nếu bạn muốn mã hóa độc lập nền tảng rất đơn giản, bạn có thể sử dụng openssl .
Nếu bạn vẫn muốn sử dụng openssl:
Mã hóa:
openssl aes-256-cbc -in attack-plan.txt -out message.enc
Giải mã:
openssl aes-256-cbc -d -in message.enc -out plain-text.txt
Bạn có thể nhận được openssl để mã hóa base64
tin nhắn bằng cách sử dụng công -a
tắc trên cả mã hóa và giải mã. Bằng cách này, bạn có thể dán bản mã vào một thông điệp email chẳng hạn. Nó sẽ trông như thế này:
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=
Lưu ý rằng bạn có một sự lựa chọn về mật mã và phương thức hoạt động. Để sử dụng bình thường, tôi khuyên dùng aes 256 ở chế độ CBC. Đây là các chế độ mật mã bạn có sẵn (chỉ tính 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
Xem thêm:
Xin lưu ý:
OpenSSL sẽ hỏi bạn mật khẩu. Đây không phải là khóa mã hóa, nó không giới hạn ở 32 byte! Nếu bạn định chuyển tập tin với người khác, bí mật chung của bạn sẽ rất mạnh mẽ. Bạn có thể sử dụng trang này để hiểu mật khẩu của bạn tốt như thế nào:
Cảnh báo: Tôi đã kiểm tra rằng các trang web này không gửi mật khẩu của bạn đến máy chủ, nhưng điều đó có thể thay đổi bất cứ lúc nào. Sử dụng các trang web này với các công cụ / thanh tra dev và kiểm tra xem chúng có gửi gì trước khi nhập mật khẩu mạnh của bạn không.
/usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc
với điều ngược lại như bạn mong đợi.
openssl
công cụ dòng lệnh chủ yếu là một bằng chứng để kiểm tra thư viện OpenSSL. Câu trả lời đúng cho câu hỏi này là GPG hoặc một số người lưu trữ, chẳng hạn như 7z .
openssl enc
thực sự không an toàn nếu bạn có mật khẩu yếu. Trước đây tôi đã khuyến nghị sử dụng một số openssl enc
, nhưng bây giờ đề nghị sử dụng gpg
thay vì sử dụng KDF theo cách tốt hơn. Xem câu trả lời này .
Tôi thích sử dụng gpg
lệnh:
Mã hóa:
gpg --cipher-algo AES256 --symmetric filename.tar.gz
Tốc ký:
gpg --cipher-algo AES256 -c filename.tar.gz
Điều này sẽ yêu cầu một mật khẩu.
Giải mã:
gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg
Tốc ký:
gpg -o filename.tar.gz -d filename.tar.gz.gpg
Bạn cũng có thể thêm cipher-algo AES256
vào ~/.gnupg/gpg.conf
để biến AES256 thành mặc định. (Theo manpage đó là CAST5 )
AES
(có nghĩa là AES-128). AES-128 nhanh hơn một chút và không kém an toàn.
gpg
lưu trữ mật khẩu?
7z (khi tùy chọn mật khẩu được sử dụng) sử dụng mã hóa AES 256 bit (với kéo dài khóa SHA256 ).
Cài đặt nó ( p7zip-full
), nhấp chuột phải vào tệp hoặc thư mục bạn muốn mã hóa và chọn Nén , .7z và các tùy chọn / Mật khẩu khác .
Để giải mã, nhấp chuột phải vào tệp .7z và chọn Trích xuất tại đây .
Trang web được liên kết chứa một công cụ mã hóa / giải mã aes 256-bit nguồn mở và là đa nền tảng - MacOs, Windows, Linux và các công cụ khác thông qua Java.
Mã hóa: aescrypt -e <file>
Giải mã: aescrypt -d <file>
Bạn có thể sao lưu và mã hóa thư mục nhà của mình bằng cú pháp:
tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes
make
sudo make install
Tải về các tệp nhị phân hoặc mã nguồn từ trang web.
Rất nhiều lời đề nghị mà tôi đã đưa ra đã được đưa ra trong chủ đề này. Về cơ bản, openssl thực sự là cách dễ nhất để mã hóa một tập tin hoặc tập lệnh. Tuy nhiên, tôi sẽ thận trọng không sử dụng AES-256 chỉ vì nó không có sẵn trong tất cả các phiên bản openssl trên một số nền tảng. Hầu hết các hệ điều hành mới hơn ... tức là Linux có nó. Nhưng những người khác như AIX 5.3 thì không (tôi nghĩ HP-UX cũng vậy). Nếu bạn có ý định sử dụng tệp hoặc tập lệnh của mình trên các nền tảng khác nhau, tôi thực sự khuyên bạn nên sử dụng AES-128 vì điều này có sẵn ở mọi nơi.
Làm thế nào bạn có thể "nhanh chóng và dễ dàng" mã hóa một tệp bằng AES-128?
Một trang web như www.ShellScrypt.com sử dụng openssl AES-128 khá mãnh liệt để mã hóa tập lệnh shell và sau đó làm cho các bản sao được mã hóa của tập lệnh có thể thực thi được. Tất cả bạn phải làm là dán tập lệnh vào trang web và một tệp zip sẽ được tạo cho bạn. Tệp zip đó sẽ chứa phiên bản được mã hóa (và có thể thực thi được nếu là tập lệnh) của tệp của bạn. Điều này cho phép bạn " dễ dàng " và " thuận tiện " mã hóa tập tin / tập lệnh mà không phải đáp ứng bất kỳ yêu cầu gói hoặc mô-đun nào trên mọi hệ thống bạn định sử dụng tập lệnh trên hoặc chạy một số câu thần chú phức tạp và khó hiểu của các lệnh openssl.
Dưới đây là một cơ sở mã hóa / giải mã openssl lệnh sử dụng 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:~$
Thêm vào câu trả lời của Stefano Palazzo, tôi đã tạo ra một hàm bash nhỏ hoạt động tương tự như lệnh base64.
Nó sẽ aes256 mã hóa một tập tin, và sau đó base64 mã hóa nó. Khi thực hiện ngược lại, nó sẽ giải mã64, giải mã và sau đó nhổ bản gốc.
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"
}
Sử dụng:
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
ngắn hơnopenssl enc -aes-256-cbc
và hoạt động quá. Trang hướng dẫn cho việc này có sẵn bằng cách chạyman enc
. Không bao giờ sử dụngecb
cho dữ liệu không nên được tôi luyện, luôn luôn sử dụngcbc
.-salt
là dư thừa vì nó mặc định. Nếu bạn bỏ qua-out filename
, đầu ra sẽ được ghi vào đầu ra tiêu chuẩn, điều này rất hữu ích nếu bạn chỉ cần phân tích dữ liệu, nhưng không ghi nó vào đĩa. Lệnh tiếp theo hiển thị giới hạn dòng cho bản rõ :openssl aes-256-cbc -d -in filename | wc -l
. (sử dụng khác, đọc tệpopenssl aes-256-cbc -d -in filename | less
:)