OpenSSL字符串解密问题

时间:2013-06-14 21:41:21

标签: encryption openssl cryptography

我会尝试尽可能简洁。

我希望能够加密&使用OpenSSL解密简单的字符串,这是我之前做过的。

但是,必须满足以下条件:

  • 使用简单密码短语(无密钥)
  • 没有输入/输出文件
  • 没有提示密码短语(通过任一方向的命令行选项指定)

我在那里50%。我可以通过以下方式成功执行ENCRYPTION:

echo 'someTextIWantToEncrypt' | openssl enc -e -aes-256-cbc -nosalt -pass pass:mySecretPass

输出结果为:

(??b}n??v???>??G??.?B??~?
好的,太好了。现在我想解开那个字符串。所以我这样做:

echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:mySecretPass

甚至作为替代方案:

openssl enc -d -aes-256-cbc -pass pass:mySecretPass <<< '(??b}n??v???>??G??.?B??~?'

但我得到了这样的答复:

bad magic number

虽然我不想使用输入/输出文件,但该方法可以100%工作:

# encrypt to file
echo -n 'someTextIWantToEncrypt' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:mySecretPass 

# decrypt from file
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:mySecretPass

# result of decryption (is successful):
someTextIWantToEncrypt

那么......我怎样才能实现上述解密过程没有使用输入/输出文件?我觉得我很亲密,但遗漏了一些小细节。

提前致谢。

2 个答案:

答案 0 :(得分:30)

问题是加密使用整个ASCII字符集,包括不可打印的字符。如果您希望能够剪切和粘贴加密数据,则需要将其转换为仅可打印字符。您可以使用-base64(或-a)选项执行此操作:

echo 'someTextIWantToEncrypt' | \
  openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:mySecretPass

KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=

然后以同样的方式解密:

echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
  openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:mySecretPass

警告:如果您使用的是openssl,我只能假设数据的机密性,因此密码对您很重要。如果是这种情况,您应该从不在命令行上提供密码,因为它可以向有权运行ps的任何人公开。

更好的解决方案是将密码存储在环境变量中,并让openssl从那里读取它:

export passwd="mySecretPass"
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
  openssl enc -base64 -d -aes-256-cbc -nosalt -pass env:passwd

答案 1 :(得分:0)

解密

#!/bin/bash
clear 
# encrypt to file
echo "enter choice "
echo "1-dakr"
echo "2-gakr"
read choice 
case $choice in
1 )
echo "text?"
read text
echo "pass?"
read pass

echo -n '$text' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:$pass 
;;
2 ) 
# decrypt from file
echo "pass?"
read pass
echo "path?"
read path
openssl enc -d -nosalt -in $path -aes-256-cbc -pass pass:$pass
;;
* )
echo "shcd"
;;
esac

Decrypt的输出是$ text如何解决?