我有一个16字节的字符,我想使用openssl加密成一个16字节的加密字符串。这个加密的字符串(以人类可读的格式)然后需要提供给一个使用它的用户,这个字符串将被解密成它原来的16字节的形式,用于比较和验证,谁能告诉我这是如何在openssl命令行中实现的。
9nvpjoqh1#
下面是在命令行中使用openssl加密字符串的一种方法(必须输入密码两次):
echo -n "aaaabbbbccccdddd" | openssl enc -e -aes-256-cbc -a -salt enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password:
输出如下所示:
U2FsdGVkX1/6LATntslD80T2HEIn3A0BqxarNfwbg31D2kI00dYbmBo8Mqt42PIm
编辑:据我所知,你不能控制输出的字节数。你可以用b64或hex编码,但仅此而已。另外,如果你想把这个字符串保存到一个文件而不是stdout,使用-out选项。
axr492tv2#
试试这个:
echo 'foo' | openssl aes-256-cbc -a -salt echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt
跑
openssl list-cipher-commands
列出所有可用的密码。
anhgbhbe3#
我有一个16字节的字符,我想使用openssl将其加密为16字节的加密字符串[人类可读格式]我相信你正在寻找格式保持加密。我认为警告是你必须从一个16字节的人类可读字符串开始。菲利普Rogaway有一篇关于该技术的论文:Synopsis of Format-Preserving Encryption。这篇论文有很多内容,在堆栈溢出上无法放入一个段落。如果你可以从一个较短的字符串开始,并使用OCB、OFB或CTR这样的流模式,那么你可以对最终的字符串进行Base64编码,使结果为16个字节,并且是人类可读的。Base64以3 → 4的速率扩展(3个未编码扩展为4个编码),所以你需要一个长度为12个字符的较短字符串来实现16个人类可读的字符。据我所知,目前还没有命令行工具可以在本地完成此操作。您可以在命令行上使用OpenSSL和AES/CTR,并通过base64命令传输它。下面的代码比较接近,但它以11个字符(而不是12个字符)开头:
base64
$ echo 12345678901 | openssl enc -e -base64 -aes-128-ctr -nopad -nosalt -k secret_password cSTzU8+UPQQwpRAq
此外,您 * 真的 * 需要了解-k选项(和-K),以及它如何派生密钥,以便您可以在OpenSSL命令之外完成它(如果需要)。
-k
-K
gmxoilav4#
试试这个
$ echo "a_byte_character" | openssl enc -base64
并且有100多种密码类型
-aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-gcm -aes-128-ofb -aes-128-xts -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-gcm -aes-192-ofb -aes-256-cbc -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-gcm -aes-256-ofb -aes-256-xts -aes128 -aes192 -aes256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ofb -des-ofb -des3 -desx -desx-cbc -id-aes128-GCM -id-aes192-GCM -id-aes256-GCM -rc2 -rc2-40-cbc -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -rc4-hmac-md5 -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb
qpgpyjmq5#
我在使用echo和-n时遇到了麻烦。这对我很有效:要加密:
echo "PLAINTEXT_STRING" | openssl enc -aes256 -pbkdf2 -base64
系统将提示您提供解密密码。要解密:
echo "ENCRYPTED_STRING" | openssl aes-256-cbc -d -pbkdf2 -a
输入解密密码进行解密。
5条答案
按热度按时间9nvpjoqh1#
下面是在命令行中使用openssl加密字符串的一种方法(必须输入密码两次):
输出如下所示:
编辑:据我所知,你不能控制输出的字节数。你可以用b64或hex编码,但仅此而已。另外,如果你想把这个字符串保存到一个文件而不是stdout,使用-out选项。
axr492tv2#
试试这个:
跑
列出所有可用的密码。
anhgbhbe3#
我有一个16字节的字符,我想使用openssl将其加密为16字节的加密字符串[人类可读格式]
我相信你正在寻找格式保持加密。我认为警告是你必须从一个16字节的人类可读字符串开始。菲利普Rogaway有一篇关于该技术的论文:Synopsis of Format-Preserving Encryption。这篇论文有很多内容,在堆栈溢出上无法放入一个段落。
如果你可以从一个较短的字符串开始,并使用OCB、OFB或CTR这样的流模式,那么你可以对最终的字符串进行Base64编码,使结果为16个字节,并且是人类可读的。Base64以3 → 4的速率扩展(3个未编码扩展为4个编码),所以你需要一个长度为12个字符的较短字符串来实现16个人类可读的字符。
据我所知,目前还没有命令行工具可以在本地完成此操作。您可以在命令行上使用OpenSSL和AES/CTR,并通过
base64
命令传输它。下面的代码比较接近,但它以11个字符(而不是12个字符)开头:此外,您 * 真的 * 需要了解
-k
选项(和-K
),以及它如何派生密钥,以便您可以在OpenSSL命令之外完成它(如果需要)。gmxoilav4#
试试这个
并且有100多种密码类型
qpgpyjmq5#
我在使用echo和-n时遇到了麻烦。这对我很有效:
要加密:
系统将提示您提供解密密码。
要解密:
输入解密密码进行解密。