39

openssl を使用して 16 バイトの暗号化文字列に暗号化したい 16 バイト文字があります。

この暗号化された文字列 (人間が読める形式) は、それを使用するユーザーに提供される必要があり、文字列は比較と認証のために元の 16 バイト形式に復号化されます。opensslコマンドラインでこれがどのように可能になるか教えてください。

前もって感謝します。

4

4 に答える 4

29

コマンド ラインで openssl を使用して文字列を暗号化する 1 つの方法を次に示します (パスワードを 2 回入力する必要があります)。

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または16進数でエンコードできますが、それだけです。また、その文字列を stdout ではなくファイルに保存する場合は、-out オプションを使用します。

于 2012-04-11T23:29:23.760 に答える
12

これを試して:

echo 'foo' | openssl aes-256-cbc -a -salt
echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt

走る

openssl list-cipher-commands 

使用可能なすべての暗号を一覧表示します。

于 2017-11-27T18:59:13.503 に答える
7

openssl を使用して 16 バイトの暗号化文字列 [人間が読める形式] に暗号化したい 16 バイトの文字があります。

Format Preserving Encryption を探していると思います。警告は、人間が読める 16 バイトの文字列から始めなければならないことだと思います。Phillip Rogaway は、このテクノロジに関する論文を発表しています: Synopsis of Format-Preserving Encryption。この論文には多くのことがあり、Stack Overflow の 1 つの段落には収まりません。

短い文字列で開始し、OCB、OFB、CTR などのストリーミング モードを使用できる場合は、最終的な文字列を Base64 でエンコードして、結果が 16 バイトで人間が判読できるようにすることができます。Base64 は 3 → 4 の割合で展開されるため (3 つのエンコードされていないものが 4 つのエンコードされたものに展開される)、人間が読める 16 文字を達成するには、長さ 12 文字の短い文字列が必要になります。

私の知る限り、ネイティブで実行できるコマンド ライン ツールはありません。コマンドラインで AES/CTR を使用して OpenSSL を使用し、コマンドでパイプすることができる場合がありますbase64。以下は近いですが、11文字で始まります(12文字ではありません):

$ echo 12345678901 | openssl enc -e -base64 -aes-128-ctr -nopad -nosalt -k secret_password
cSTzU8+UPQQwpRAq

また、teオプション (さらに言えば) と、OpenSSL コマンドの外部で (必要に応じて) キーを取得できるようにキーを導出する方法についても理解する必要があります。-k-K

于 2014-07-31T18:55:04.780 に答える