我想使用AES-256加密文件。如何快速轻松地做到这一点,以及我或其他人如何再次对其进行解密?
我想使用AES-256加密文件。如何快速轻松地做到这一点,以及我或其他人如何再次对其进行解密?
Answers:
不幸的是,没有简单的解决方案来保护您的东西。考虑一下您的用例,也许普通AES以外的其他方法更合适。
如果您想要非常简单的平台独立加密,则可以使用openssl。
如果仍然要使用openssl:
加密:
openssl aes-256-cbc -in attack-plan.txt -out message.enc
解密:
openssl aes-256-cbc -d -in message.enc -out plain-text.txt
base64
通过使用-a
加密和解密上的开关,可以使openssl来对消息进行-encoding 。这样,您可以将密文粘贴到例如电子邮件中。它看起来像这样:
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=
请注意,您可以选择密码和操作模式。对于正常使用,我建议在CBC模式下使用AES 256。这些是您可用的密码模式(仅计算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个字节!如果您要与他人传输文件,则您的共享机密应该非常牢固。您可以使用此网站来了解密码的安全性:
警告:我已经检查过这些站点没有将您的密码发送到服务器,但是可以随时更改。将这些网站与开发工具/检查器一起使用,并在输入您的强密码之前检查它们是否发送了任何内容。
/usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc
与您期望的相反。
openssl
命令行工具主要是用于测试OpenSSL库的概念验证。这个问题的正确答案是GPG或某些归档器,例如7z。
我喜欢使用以下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速度稍快一些,并且安全性也不差。
gpg
缓存密码?
我将提出的许多建议已在此主题中提出。基本上,openssl实际上是加密文件或脚本的最简单方法。但是,我要警告不要使用AES-256,因为它在某些平台上的所有版本的opensl中都不可用。大多数较新的操作系统...即Linux都有它。但是其他诸如AIX 5.3之类的不支持(我也认为HP-UX)。如果打算在不同平台上使用文件或脚本,强烈建议使用AES-128,因为它随处可见。
您如何使用AES-128“快速,轻松地”加密文件?
诸如www.ShellScrypt.com之类的网站非常强烈地使用openssl AES-128加密Shell脚本,然后使脚本的加密副本成为可执行文件。您所要做的就是将脚本粘贴到站点,然后将为您生成一个zip文件。该zip文件将包含文件的加密版本(如果是脚本,则为可执行文件)。这样,您就可以“ 轻松地 ”和“ 方便地 ”对文件/脚本进行加密,而不必满足要在其上使用脚本或运行openssl命令的多个复杂且令人困惑的含义的每个系统上的任何程序包或模块要求。
下面显示的是使用AES-128 的基本加密/解密 openssl命令:
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:~$
除了Stefano Palazzo的答案之外,我还创建了一个bash小函数,其功能与base64命令相似。
它将aes256加密文件,然后进行base64编码。进行相反操作时,它将对base64进行解码,解密,然后吐出原始明文。
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.
openssl aes-256-cbc
比它还短,openssl enc -aes-256-cbc
也可以工作。可以通过运行来获得手册页面man enc
。永远不要使用ecb
不宜处理的数据cbc
。-salt
由于它是默认值,因此是多余的。如果省略,-out filename
则输出将被写入标准输出,如果您只需要分析数据而不将其写入磁盘,这将非常有用。下一条命令显示明文的行号:openssl aes-256-cbc -d -in filename | wc -l
。(另一种用法,读文件:openssl aes-256-cbc -d -in filename | less
)