web-dev-qa-db-ja.com

OpenSSL文字列復号化の問題

私はこれを可能な限り簡潔にするよう努めます。

以前に行ったOpenSSLを使用して単純な文字列を暗号化および復号化できるようにしたい。

ただし、次の条件を満たす必要があります。

  • 単純なパスフレーズの使用(キーなし)
  • 入出力ファイルなし
  • パスフレーズのプロンプトなし(どちらの方向でもコマンドラインオプションで指定)

私はそこに50%います。私は正常に暗号化を実行できます:

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

だから...どうすれば入力/出力ファイルを使用して上記の復号化プロセス-なしを実現できますか?近くにいるように感じますが、細かい部分が不足しています。

前もって感謝します。

17
maximum ldap

問題は、暗号化が印刷できない文字を含む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
31
Adam Liss

復号化

#!/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でどのように修正するのですか?

0
Odin