openssl を使用して 16 バイトの暗号化文字列に暗号化したい 16 バイト文字があります。
この暗号化された文字列 (人間が読める形式) は、それを使用するユーザーに提供される必要があり、文字列は比較と認証のために元の 16 バイト形式に復号化されます。opensslコマンドラインでこれがどのように可能になるか教えてください。
前もって感謝します。
コマンド ラインで 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 オプションを使用します。
これを試して:
echo 'foo' | openssl aes-256-cbc -a -salt
echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt
走る
openssl list-cipher-commands
使用可能なすべての暗号を一覧表示します。
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