1つのパスワードを使ってファイルを暗号化および復号化したい。
OpenSSLを使ってそれを行うことができますか?
これはGoogleからのあなたの質問に対するトップの答えです: http://tombuntu.com/index.php/2007/12/12/simple-file-encryption-with-openssl/
暗号化:
openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc
復号化する:
openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new
しかし、これは公開鍵基盤をまったく利用していないので、ドライバーで釘を打つのに少し似ています:-)
gpg
の代わりにopenssl
を使用することをお勧めします。この回答の最後にある "追加の注意事項" を参照してください。しかし、openssl
を使用して質問に答えるには、
暗号化するには:
openssl enc -aes-256-cbc -in un_encrypted.data -out encrypted.data
復号化するには:
openssl enc -d -aes-256-cbc -in encrypted.data -out un_encrypted.data
注:暗号化または復号化時にパスワードの入力を求められます。
openssl enc
に関するあなたの最良の情報源はおそらく以下のようになるでしょう: https://www.openssl.org/docs/apps/enc.html
コマンドライン: openssl enc
の形式は以下のとおりです。
openssl enc -ciphername [-in filename] [-out filename] [-pass arg]
[-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename]
[-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P]
[-bufsize number] [-nopad] [-debug] [-none] [-engine id]
あなたの質問に関して最も有用なパラメータの説明:
-e
Encrypt the input data: this is the default.
-d
Decrypt the input data.
-k <password>
Only use this if you want to pass the password as an argument.
Usually you can leave this out and you will be prompted for a
password. The password is used to derive the actual key which
is used to encrypt your data. Using this parameter is typically
not considered secure because your password appears in
plain-text on the command line and will likely be recorded in
bash history.
-kfile <filename>
Read the password from the first line of <filename> instead of
from the command line as above.
-a
base64 process the data. This means that if encryption is taking
place the data is base64 encoded after encryption. If decryption
is set then the input data is base64 decoded before being
decrypted.
You likely DON'T need to use this. This will likely increase the
file size for non-text data. Only use this if you need to send
data in the form of text format via email etc.
-salt
To use a salt (randomly generated) when encrypting. You always
want to use a salt while encrypting. This parameter is actually
redundant because a salt is used whether you use this or not
which is why it was not used in the "Short Answer" above!
-K key
The actual key to use: this must be represented as a string
comprised only of hex digits. If only the key is specified, the
IV must additionally be specified using the -iv option. When
both a key and a password are specified, the key given with the
-K option will be used and the IV generated from the password
will be taken. It probably does not make much sense to specify
both key and password.
-iv IV
The actual IV to use: this must be represented as a string
comprised only of hex digits. When only the key is specified
using the -K option, the IV must explicitly be defined. When a
password is being specified using one of the other options, the
IV is generated from this password.
OpenSSLについて具体的に質問しましたが、この記事に基づく暗号化の目的で代わりにGPGを使用することを検討することをお勧めします。 オフサイトバックアップの暗号化におけるOpenSSLとGPG
GPGを使用して同じことを実行するには、次のコマンドを使用します。
暗号化するには:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
復号化するには:
gpg --output un_encrypted.data --decrypt encrypted.data
注:暗号化または復号化時にパスワードの入力を求められます。
暗号化:
openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k symmetrickey
復号化する:
openssl enc -in encrypted.dat -out outfile.txt -d -aes256 -k symmetrickey
詳細は openssl(1)
docsを参照してください。
暗号化するには:
$ openssl bf < arquivo.txt > arquivo.txt.bf
復号化するには:
$ openssl bf -d < arquivo.txt.bf > arquivo.txt
bf ===フグのCBCモード
OpenSSL CLIはパスフレーズをキーに変換するために弱い非標準のアルゴリズムを使用し、GPGをインストールするとホームディレクトリに追加された様々なファイルとgpg-agentバックグラウンドプロセスが実行されることに注意してください。最大限の移植性と既存のツールによる制御が必要な場合は、PHPまたはPythonを使用して低レベルのAPIにアクセスし、完全なAES KeyとIVを直接渡すことができます。
Bashを介したPHP呼び出しの例:
IV='c2FtcGxlLWFlcy1pdjEyMw=='
KEY='Twsn8eh2w2HbVCF5zKArlY+Mv5ZwVyaGlk5QkeoSlmc='
INPUT=123456789023456
ENCRYPTED=$(php -r "print(openssl_encrypt('$INPUT','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$ENCRYPTED='$ENCRYPTED
DECRYPTED=$(php -r "print(openssl_decrypt('$ENCRYPTED','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$DECRYPTED='$DECRYPTED
これは出力します:
$ENCRYPTED=nzRi252dayEsGXZOTPXW
$DECRYPTED=123456789023456
PHPのopenssl_pbkdf2
関数を使ってパスフレーズを安全に鍵に変換することもできます。
ランダムに生成された公開鍵を使用して更新します。
Encypt:
openssl enc -aes-256-cbc -a -salt -in {raw data} -out {encrypted data} -pass file:{random key}
復号化:
openssl enc -d -aes-256-cbc -in {ciphered data} -out {raw data}
私は http://bigthinkingapplied.com/key-based-encryption-using-openssl/でこれに関する完全なチュートリアルを持っています /
私はそれがファイルを暗号化しそして解読するのにopensslを使用するオンラインで見つけたオープンソースプログラムがあります。これは単一のパスワードでこれを行います。このオープンソーススクリプトの素晴らしいところは、ファイルを細断処理することによって元の暗号化されていないファイルを削除することです。しかし、危険なことは、元の暗号化されていないファイルが削除されたら、パスワードを忘れないようにする必要があることです。そうしないと、他の方法でファイルを復号化できません。
こちらのリンクはgithubにあります
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
OPENSSLデフォルトキー派生を使用しないでください。
現在受け入れられている答えはそれを利用しており、もはや推奨されていないし安全でもありません。
攻撃者が単純にキーをブルートフォースすることは非常に実現可能です。
https://www.ietf.org/rfc/rfc2898.txt
PBKDF1は、キーを導出するためにMD2 [6]、MD5 [19]、またはSHA-1 [18]となるハッシュ関数を適用します。派生キーの長さは、ハッシュ関数出力の長さによって制限されます。これは、MD2とMD5では16オクテット、SHA-1では20オクテットです。 PBKDF1はPKCS#5 v1.5の鍵導出プロセスと互換性があります。 PBKDF1は既存のアプリケーションとの互換性のためだけに推奨されています。PBKDF1が生成するキーは、一部のアプリケーションには十分な大きさではない可能性があるためです。
PBKDF2は、キーを導出するために擬似乱数関数(例については付録B.1を参照)を適用します。派生キーの長さは基本的には無制限です。 (ただし、派生キーの最大有効サーチスペースは、基になる擬似ランダム関数の構造によって制限される可能性があります。詳細については付録B.1を参照してください。)PBKDF2は、新しいアプリケーションに推奨されます。
これを行う:
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in hello -out hello.enc -k meow
openssl enc -d -aes-256-cbc -pbkdf2 -iter 20000 -in hello.enc -out hello.out
注 :復号化の繰り返しは、暗号化の繰り返しと同じである必要があります。
繰り返し回数は10000以上である必要があります。繰り返し回数の正しい答えは次のとおりです。 https://security.stackexchange.com/a/3993
また... GPGを推薦する十分な人がここにいます。いまいましい質問を読んでください。