bash - 如何使用 openssl 将加密/解密消息输出到 stdout

标签 bash shell encryption openssl

我只是尝试使用 shell 加密/解密密码(非交互式 - 用于自动脚本)。我正在遵循这个例子: https://superuser.com/a/20552/362669

我尝试将其转换为这样,以便它不使用文件output.bin来存储加密文本:

#!/usr/bin/env bash

cd `dirname "$BASH_SOURCE"`

# generate a 2048-bit RSA key and store it in key.txt
openssl genrsa -out key.txt 2048

# encrypt "hello world" using the RSA key in key.txt
encrypted="$(echo "hello world" | openssl rsautl -inkey key.txt -encrypt)"

echo "encrypted: $encrypted"

# decrypt the message and output to stdout
decrypted="$(echo "$encrypted" | openssl rsautl -inkey key.txt -decrypt)"

echo "decrypted: $decrypted";

但我得到的只是这个乱七八糟的东西:

Generating RSA private key, 2048 bit long modulus
........................................................................................................................+++
............................+++
e is 65537 (0x10001)
��◆J��┌ܥײ��R▒��%⎽F��    1l�}�%��?�0���+��%���C�8|_/!�A"Ꜵ:�������.��W2Pras��1���� ��(�a
��]�[�남␍◆�=┬─�з≤�ɦ�;�└�1MFP��^␋�@D�    �T_⎺F�Eπ�2��U2Ÿ┌π��N│�� ⎽��_\2�� 8V��%��(�^���␍4�#�π���*^D ���/�└�
RSA ⎺⎻␊⎼▒├␋⎺┼ ␊⎼⎼⎺⎼
4662363756:␊⎼⎼⎺⎼:04FFF06B:⎼⎽▒ ⎼⎺┤├␋┼␊⎽:CRYPTO_␋┼├␊⎼┼▒┌:␉┌⎺␌┐ ├≤⎻␊ ␋⎽ ┼⎺├ 02:/B┤␋┌␍R⎺⎺├/L␋␉⎼▒⎼≤/C▒␌␤␊⎽/␌⎺└.▒⎻⎻┌␊.│␉⎽/S⎺┤⎼␌␊⎽/┌␋␉⎼␊⎽⎽┌/┌␋␉⎼␊⎽⎽┌-22.260.1/┌␋␉⎼␊⎽⎽┌-2.6/␌⎼≤⎻├⎺/⎼⎽▒/⎼⎽▒_⎻┐1.␌:185:
4662363756:␊⎼⎼⎺⎼:04FFF072:⎼⎽▒ ⎼⎺┤├␋┼␊⎽:CRYPTO_␋┼├␊⎼┼▒┌:⎻▒␍␍␋┼± ␌␤␊␌┐ °▒␋┌␊␍:/B┤␋┌␍R⎺⎺├/L␋␉⎼▒⎼≤/C▒␌␤␊⎽/␌⎺└.▒⎻⎻┌␊.│␉⎽/S⎺┤⎼␌␊⎽/┌␋␉⎼␊⎽⎽┌/┌␋␉⎼␊⎽⎽┌-22.260.1/┌␋␉⎼␊⎽⎽┌-2.6/␌⎼≤⎻├⎺/⎼⎽▒/⎼⎽▒_␊▒≤.␌:580:
␍␊␌⎼≤⎻├␊␍: 
▒┌␊│⎽-└▒␌:␋┼├␊⎼⎺⎽ ▒┌␊│$ 

我的 shell session 基本上一团糟。

有人知道那是什么吗?也许它输出的字符是 shell 无法处理的?

更新:如果我不记录加密值,那么我会得到:

Generating RSA private key, 2048 bit long modulus
........................+++
..........+++
e is 65537 (0x10001)
RSA operation error
4558829164:error:04FFF06B:rsa routines:CRYPTO_internal:block type is not 02:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/rsa/rsa_pk1.c:185:
4558829164:error:04FFF072:rsa routines:CRYPTO_internal:padding check failed:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/rsa/rsa_eay.c:580:
decrypted: 

最佳答案

我认为最好的想法是将二进制文件与 Base64 相互转换。

只需通过“openssl base64”将输出传送到命令即可启用,并通过“openssl base64 -d”命令进行解码。

所以:

encrypted="$(echo "hello world" | openssl rsautl -inkey key.txt -encrypt | openssl base64)"

decrypted="$(echo "$encrypted" | openssl base64 -d | openssl rsautl -inkey key.txt -decrypt)"

关于bash - 如何使用 openssl 将加密/解密消息输出到 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56281320/

相关文章:

mysql - 将 mysqldump 从 bash 脚本重定向到文件

arrays - 在 bash 中创建关联数组

shell - "history -p"有什么作用?

c# - 如何使用 AES 在一个程序中加密,在另一个程序中解密

linux - 如何对目录中的所有文件执行命令并将每个文件的输出移动到新文件夹?

regex - Grep 获取单行注释,但排除 http ://example. com 等内容

regex - 在 bash 中使用正则表达式查找文件

linux - echo - - - 在 shell 命令中是什么意思?

php - "zero knowledge"mysql数据库加密

java - 使用 AES 的 Angular 加密与旧的 Java 代码有不同的结果