秘密鍵でファイルを暗号化し、公開鍵で復号化したいと思います。公開鍵は私のアプリケーションに含まれています。だからファイルを生成したことを確認したいと思います。 gpgまたはopensslを使用してどのように達成できますか?
答え1
これを行うには、OpenSSLを使用します。簡単な例に従ってください。
ファイルを暗号化するには:
openssl rsautl -encrypt -inkey public_key.pem -pubin -in <decrypted file> -out <encrypted file>
ファイルの復号化:
openssl rsautl -decrypt -inkey private_key.pem -in <encrypted file> -out <decrypted file>
答え2
秘密鍵で暗号化し、公開鍵で復号化できます。
- 暗号化
$ TEXT="proof that private key can encrypt and public key can decrypt" $ echo "$TEXT" | openssl rsautl -sign -inkey private.key -in - -out - | base64 > encrypted.txt
- 復号
$ cat encrypted.txt | base64 -d | openssl rsautl -verify -pubin -inkey public.key -in - proof that private key can encrypt and public key can decrypt
ご覧のとおり、復号化されたファイルは暗号化フェーズで作成したテキストと正確に一致します。
答え3
秘密鍵の所有者がそのファイルを提供したことを保証するために、秘密鍵を使用してファイルにタグを添付することを呼び出します。兆候、ラベルは次のように呼び出されます。兆候。
同じタイプの公開鍵と秘密鍵を使用して単純化された(安全でない)アルゴリズムを使用する一般的な暗号化システム(教科書RSA)があり、復号化は署名と同じであり、暗号化は確認と同じです。これは通常そうではありません。 RSAも異なる復号化と署名メカニズム(それぞれ暗号化と検証)を使用し、他の多くのアルゴリズムの秘密鍵と公開鍵は同じ種類の数学的オブジェクトではありません。
だからあなたは文書に署名したいと思います。事実上の標準ツールは次のとおりです。GnuPG。
キーでファイルに署名するには、次の手順に従ってください。
gpg -s /path/to/file
複数のキーがある場合(アプリケーションキーと秘密キーなど)、この--local-user
オプションを使用してキーを選択します。
file.gpg
ファイルを使用したい場所に移動します。また、公開鍵(おそらくアプリケーションパッケージ内)を送信します。元のテキストを抽出して署名を確認するには、次の手順を実行します。
gpg file.gpg
より便利な場合は、file
独自に送信して別々の署名と呼ばれる別々の署名ファイルを生成できます。分離された署名を生成するには:
gpg -b /path/to/file
確認する:
gpg file.gpg file
このオプションを使用してファイルを暗号化することもできます-e
。もちろん、これは受信者(オプションを使用して指定-r
)が秘密鍵を持ち、プロデューサーが公開鍵を持つ別々の鍵ペアを必要とすることを意味します。
答え4
@rsmoorthy として文や小さなファイルを暗号化でき、鍵より短くする必要があります。より大きなファイルを暗号化するには、rsaとaesを使用する必要があります。
# Assuming you're using linux
$ cat /proc/sys/kernel/random/uuid | sed 's/-//g' | tee key.plain
$ openssl enc -nosalt -aes-256-cbc -in test.zip -out test.zip.enc -k $(cat key.plain)
# Assuming you have a pair of rsa keys (crypt.priv and crypt.pub)
$ openssl rsautl -sign -inkey crypt.priv -in key.plain -out key.enc
ここで、「test.zip.enc」、「crypt.pub」、および「key.enc」を使用してファイルを復号化します。
$ openssl rsautl -verify -pubin -inkey crypt.pub -in key.enc -out key.de
$ openssl enc -nosalt -aes-256-cbc -d -in test.zip.enc -out de.zip -k $(cat key.de)