OpenSSLで、ファイルを暗号化・複合化、ファイルのハッシュ値を取得をコマンドで実行したてみたので、メモとして残します。
環境
- OS:CentOS Linux release 8.5.2111
- OpenSSL:OpenSSL 1.1.1k FIPS 25 Mar 2021
[root@centos85 ~]# cat /etc/redhat-release
CentOS Linux release 8.5.2111
[root@centos85 ~]# openssl version
OpenSSL 1.1.1k FIPS 25 Mar 2021
[root@centos85 ~]#
0. OpenSSLで使えるアルゴリズムの確認
まずはopenssl list help
でopenssl list
コマンドのヘルプを参照してみます。
[root@centos85 ~]# openssl list -help
Usage: list [options]
Valid options are:
-help Display this summary
-1 List in one column
-commands List of standard commands
-digest-commands List of message digest commands
-digest-algorithms List of message digest algorithms
-cipher-commands List of cipher commands
-cipher-algorithms List of cipher algorithms
-public-key-algorithms List of public key algorithms
-public-key-methods List of public key methods
-disabled List of disabled features
-missing-help List missing detailed help strings
-options val List options for specified command
[root@centos85 ~]#
ヘルプを見るに暗号化・複合化、ハッシュ値に関するものは以下の通り。
オプション | 内容 |
---|---|
-digest-commands | ハッシュ関数に関するコマンドのリスト |
-digest-algorithms | サポートされているハッシュ関数アルゴリズムのリスト |
-cipher-commands | 暗号化および復号化に関するコマンドのリスト |
-cipher-algorithms | サポートされている暗号化アルゴリズムのリスト |
-public-key-algorithms | サポートされている公開鍵暗号アルゴリズムのリスト |
-public-key-methods | サポートされている公開鍵操作メソッドのリスト |
public-key-commands
がないのは、公開鍵関連のコマンドが公開鍵アルゴリズムごとにサブコマンドとなっているからだろうと推測しています。
openssl list -digest-commands
を実行すると以下の通り。
[root@centos85 ~]# openssl list -digest-commands
blake2b512 blake2s256 gost md2
md4 md5 rmd160 sha1
sha224 sha256 sha3-224 sha3-256
sha3-384 sha3-512 sha384 sha512
sha512-224 sha512-256 shake128 shake256
sm3
[root@centos85 ~]#
openssl list -digest-algorithms
を実行すると以下の通り。
[root@centos85 ~]# openssl list -digest-algorithms
RSA-MD4 => MD4
RSA-MD5 => MD5
RSA-RIPEMD160 => RIPEMD160
RSA-SHA1 => SHA1
RSA-SHA1-2 => RSA-SHA1
RSA-SHA224 => SHA224
RSA-SHA256 => SHA256
RSA-SHA3-224 => SHA3-224
RSA-SHA3-256 => SHA3-256
RSA-SHA3-384 => SHA3-384
RSA-SHA3-512 => SHA3-512
RSA-SHA384 => SHA384
RSA-SHA512 => SHA512
RSA-SHA512/224 => SHA512-224
RSA-SHA512/256 => SHA512-256
RSA-SM3 => SM3
BLAKE2b512
BLAKE2s256
id-rsassa-pkcs1-v1_5-with-sha3-224 => SHA3-224
id-rsassa-pkcs1-v1_5-with-sha3-256 => SHA3-256
id-rsassa-pkcs1-v1_5-with-sha3-384 => SHA3-384
id-rsassa-pkcs1-v1_5-with-sha3-512 => SHA3-512
MD4
md4WithRSAEncryption => MD4
MD5
MD5-SHA1
md5WithRSAEncryption => MD5
ripemd => RIPEMD160
RIPEMD160
ripemd160WithRSA => RIPEMD160
rmd160 => RIPEMD160
SHA1
sha1WithRSAEncryption => SHA1
SHA224
sha224WithRSAEncryption => SHA224
SHA256
sha256WithRSAEncryption => SHA256
SHA3-224
SHA3-256
SHA3-384
SHA3-512
SHA384
sha384WithRSAEncryption => SHA384
SHA512
SHA512-224
sha512-224WithRSAEncryption => SHA512-224
SHA512-256
sha512-256WithRSAEncryption => SHA512-256
sha512WithRSAEncryption => SHA512
SHAKE128
SHAKE256
SM3
sm3WithRSAEncryption => SM3
ssl3-md5 => MD5
ssl3-sha1 => SHA1
whirlpool
[root@centos85 ~]#
openssl list -cipher-commands
を実行すると以下の通り。
[root@centos85 ~]# openssl list -cipher-commands
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb
aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb
aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1
aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb
aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8
aria-256-ctr aria-256-ecb aria-256-ofb base64
bf bf-cbc bf-cfb bf-ecb
bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc
camellia-192-ecb camellia-256-cbc camellia-256-ecb cast
cast-cbc cast5-cbc cast5-cfb cast5-ecb
cast5-ofb des des-cbc des-cfb
des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb
des-ede3-ofb des-ofb des3 desx
idea idea-cbc idea-cfb idea-ecb
idea-ofb rc2 rc2-40-cbc rc2-64-cbc
rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40 rc5 rc5-cbc
rc5-cfb rc5-ecb rc5-ofb seed
seed-cbc seed-cfb seed-ecb seed-ofb
zlib
[root@centos85 ~]#
openssl list -cipher-algorithms
を実行すると以下の通り。
[root@centos85 ~]# openssl list -cipher-algorithms
RC5 => RC5-CBC
AES-128-CBC
AES-128-CBC-HMAC-SHA1
AES-128-CBC-HMAC-SHA256
id-aes128-CCM
AES-128-CFB
AES-128-CFB1
AES-128-CFB8
AES-128-CTR
AES-128-ECB
id-aes128-GCM
AES-128-OCB
AES-128-OFB
AES-128-XTS
AES-192-CBC
id-aes192-CCM
AES-192-CFB
AES-192-CFB1
AES-192-CFB8
AES-192-CTR
AES-192-ECB
id-aes192-GCM
AES-192-OCB
AES-192-OFB
AES-256-CBC
AES-256-CBC-HMAC-SHA1
AES-256-CBC-HMAC-SHA256
id-aes256-CCM
AES-256-CFB
AES-256-CFB1
AES-256-CFB8
AES-256-CTR
AES-256-ECB
id-aes256-GCM
AES-256-OCB
AES-256-OFB
AES-256-XTS
aes128 => AES-128-CBC
aes128-wrap => id-aes128-wrap
aes192 => AES-192-CBC
aes192-wrap => id-aes192-wrap
aes256 => AES-256-CBC
aes256-wrap => id-aes256-wrap
ARIA-128-CBC
ARIA-128-CCM
ARIA-128-CFB
ARIA-128-CFB1
ARIA-128-CFB8
ARIA-128-CTR
ARIA-128-ECB
ARIA-128-GCM
ARIA-128-OFB
ARIA-192-CBC
ARIA-192-CCM
ARIA-192-CFB
ARIA-192-CFB1
ARIA-192-CFB8
ARIA-192-CTR
ARIA-192-ECB
ARIA-192-GCM
ARIA-192-OFB
ARIA-256-CBC
ARIA-256-CCM
ARIA-256-CFB
ARIA-256-CFB1
ARIA-256-CFB8
ARIA-256-CTR
ARIA-256-ECB
ARIA-256-GCM
ARIA-256-OFB
aria128 => ARIA-128-CBC
aria192 => ARIA-192-CBC
aria256 => ARIA-256-CBC
bf => BF-CBC
BF-CBC
BF-CFB
BF-ECB
BF-OFB
blowfish => BF-CBC
CAMELLIA-128-CBC
CAMELLIA-128-CFB
CAMELLIA-128-CFB1
CAMELLIA-128-CFB8
CAMELLIA-128-CTR
CAMELLIA-128-ECB
CAMELLIA-128-OFB
CAMELLIA-192-CBC
CAMELLIA-192-CFB
CAMELLIA-192-CFB1
CAMELLIA-192-CFB8
CAMELLIA-192-CTR
CAMELLIA-192-ECB
CAMELLIA-192-OFB
CAMELLIA-256-CBC
CAMELLIA-256-CFB
CAMELLIA-256-CFB1
CAMELLIA-256-CFB8
CAMELLIA-256-CTR
CAMELLIA-256-ECB
CAMELLIA-256-OFB
camellia128 => CAMELLIA-128-CBC
camellia192 => CAMELLIA-192-CBC
camellia256 => CAMELLIA-256-CBC
cast => CAST5-CBC
cast-cbc => CAST5-CBC
CAST5-CBC
CAST5-CFB
CAST5-ECB
CAST5-OFB
ChaCha20
ChaCha20-Poly1305
des => DES-CBC
DES-CBC
DES-CFB
DES-CFB1
DES-CFB8
DES-ECB
DES-EDE
DES-EDE-CBC
DES-EDE-CFB
des-ede-ecb => DES-EDE
DES-EDE-OFB
DES-EDE3
DES-EDE3-CBC
DES-EDE3-CFB
DES-EDE3-CFB1
DES-EDE3-CFB8
des-ede3-ecb => DES-EDE3
DES-EDE3-OFB
DES-OFB
des3 => DES-EDE3-CBC
des3-wrap => id-smime-alg-CMS3DESwrap
desx => DESX-CBC
DESX-CBC
id-aes128-CCM
id-aes128-GCM
id-aes128-wrap
id-aes128-wrap-pad
id-aes192-CCM
id-aes192-GCM
id-aes192-wrap
id-aes192-wrap-pad
id-aes256-CCM
id-aes256-GCM
id-aes256-wrap
id-aes256-wrap-pad
id-smime-alg-CMS3DESwrap
idea => IDEA-CBC
IDEA-CBC
IDEA-CFB
IDEA-ECB
IDEA-OFB
rc2 => RC2-CBC
rc2-128 => RC2-CBC
rc2-40 => RC2-40-CBC
RC2-40-CBC
rc2-64 => RC2-64-CBC
RC2-64-CBC
RC2-CBC
RC2-CFB
RC2-ECB
RC2-OFB
RC4
RC4-40
RC4-HMAC-MD5
RC5-CBC
RC5-CFB
RC5-ECB
RC5-OFB
seed => SEED-CBC
SEED-CBC
SEED-CFB
SEED-ECB
SEED-OFB
[root@centos85 ~]#
openssl list -public-key-algorithms
を実行すると以下の通り。
[root@centos85 ~]# openssl list -public-key-algorithms
Name: OpenSSL RSA method
Type: Builtin Algorithm
OID: rsaEncryption
PEM string: RSA
Name: rsa
Alias for: rsaEncryption
Name: OpenSSL PKCS#3 DH method
Type: Builtin Algorithm
OID: dhKeyAgreement
PEM string: DH
Name: dsaWithSHA
Alias for: dsaEncryption
Name: dsaEncryption-old
Alias for: dsaEncryption
Name: dsaWithSHA1-old
Alias for: dsaEncryption
Name: dsaWithSHA1
Alias for: dsaEncryption
Name: OpenSSL DSA method
Type: Builtin Algorithm
OID: dsaEncryption
PEM string: DSA
Name: OpenSSL EC algorithm
Type: Builtin Algorithm
OID: id-ecPublicKey
PEM string: EC
Name: OpenSSL HMAC method
Type: Builtin Algorithm
OID: hmac
PEM string: HMAC
Name: OpenSSL CMAC method
Type: Builtin Algorithm
OID: cmac
PEM string: CMAC
Name: OpenSSL RSA-PSS method
Type: Builtin Algorithm
OID: rsassaPss
PEM string: RSA-PSS
Name: OpenSSL X9.42 DH method
Type: Builtin Algorithm
OID: X9.42 DH
PEM string: X9.42 DH
Name: OpenSSL X25519 algorithm
Type: Builtin Algorithm
OID: X25519
PEM string: X25519
Name: OpenSSL X448 algorithm
Type: Builtin Algorithm
OID: X448
PEM string: X448
Name: OpenSSL POLY1305 method
Type: Builtin Algorithm
OID: poly1305
PEM string: POLY1305
Name: OpenSSL SIPHASH method
Type: Builtin Algorithm
OID: siphash
PEM string: SIPHASH
Name: OpenSSL ED25519 algorithm
Type: Builtin Algorithm
OID: ED25519
PEM string: ED25519
Name: OpenSSL ED448 algorithm
Type: Builtin Algorithm
OID: ED448
PEM string: ED448
[root@centos85 ~]#
openssl list -public-key-methods
を実行すると以下の通り。
[root@centos85 ~]# openssl list -public-key-methods
rsaEncryption
Type: External Algorithm
dhKeyAgreement
Type: Builtin Algorithm
dsaEncryption
Type: External Algorithm
id-ecPublicKey
Type: Builtin Algorithm
hmac
Type: Builtin Algorithm
cmac
Type: Builtin Algorithm
rsassaPss
Type: External Algorithm
X9.42 DH
Type: Builtin Algorithm
scrypt
Type: Builtin Algorithm
tls1-prf
Type: Builtin Algorithm
X25519
Type: Builtin Algorithm
X448
Type: Builtin Algorithm
hkdf
Type: Builtin Algorithm
poly1305
Type: Builtin Algorithm
siphash
Type: Builtin Algorithm
ED25519
Type: Builtin Algorithm
ED448
Type: Builtin Algorithm
[root@centos85 ~]#
今回は、共通鍵暗号方式ではopenssl enc
コマンドを、公開鍵暗号方式ではopenssl rsautl
を使うので、そのリストとヘルプも見ておきます。
[root@centos85 ~]# openssl enc -help
Usage: enc [options]
Valid options are:
-help Display this summary
-list List ciphers
-ciphers Alias for -list
-in infile Input file
-out outfile Output file
-pass val Passphrase source
-e Encrypt
-d Decrypt
-p Print the iv/key
-P Print the iv/key and exit
-v Verbose output
-nopad Disable standard block padding
-salt Use salt in the KDF (default)
-nosalt Do not use salt in the KDF
-debug Print debug info
-a Base64 encode/decode, depending on encryption flag
-base64 Same as option -a
-A Used with -[base64|a] to specify base64 buffer as a single line
-bufsize val Buffer size
-k val Passphrase
-kfile infile Read passphrase from file
-K val Raw key, in hex
-S val Salt, in hex
-iv val IV in hex
-md val Use specified digest to create a key from the passphrase
-iter +int Specify the iteration count and force use of PBKDF2
-pbkdf2 Use password-based key derivation function 2
-none Don't encrypt
-* Any supported cipher
-rand val Load the file(s) into the random number generator
-writerand outfile Write random data to the specified file
-z Use zlib as the 'encryption'
-engine val Use engine, possibly a hardware device
[root@centos85 ~]#
[root@centos85 ~]# openssl enc -list
Supported ciphers:
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-ofb -aes-192-cbc -aes-192-cfb
-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr
-aes-192-ecb -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-ofb
-aes128 -aes128-wrap -aes192
-aes192-wrap -aes256 -aes256-wrap
-aria-128-cbc -aria-128-cfb -aria-128-cfb1
-aria-128-cfb8 -aria-128-ctr -aria-128-ecb
-aria-128-ofb -aria-192-cbc -aria-192-cfb
-aria-192-cfb1 -aria-192-cfb8 -aria-192-ctr
-aria-192-ecb -aria-192-ofb -aria-256-cbc
-aria-256-cfb -aria-256-cfb1 -aria-256-cfb8
-aria-256-ctr -aria-256-ecb -aria-256-ofb
-aria128 -aria192 -aria256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb
-camellia-128-ofb -camellia-192-cbc -camellia-192-cfb
-camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr
-camellia-192-ecb -camellia-192-ofb -camellia-256-cbc
-camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8
-camellia-256-ctr -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-chacha20 -des -des-cbc
-des-cfb -des-cfb1 -des-cfb8
-des-ecb -des-ede -des-ede-cbc
-des-ede-cfb -des-ede-ecb -des-ede-ofb
-des-ede3 -des-ede3-cbc -des-ede3-cfb
-des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb
-des-ede3-ofb -des-ofb -des3
-des3-wrap -desx -desx-cbc
-id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap
-id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap -idea -idea-cbc
-idea-cfb -idea-ecb -idea-ofb
-rc2 -rc2-128 -rc2-40
-rc2-40-cbc -rc2-64 -rc2-64-cbc
-rc2-cbc -rc2-cfb -rc2-ecb
-rc2-ofb -rc4 -rc4-40
-rc5-cbc -rc5-cfb -rc5-ecb
-rc5-ofb -seed -seed-cbc
-seed-cfb -seed-ecb -seed-ofb
[root@centos85 ~]#
[root@centos85 ~]# openssl rsautl -help
Usage: rsautl [options]
Valid options are:
-help Display this summary
-in infile Input file
-out outfile Output file
-inkey val Input key
-keyform PEM|DER|ENGINE Private key format - default PEM
-pubin Input is an RSA public
-certin Input is a cert carrying an RSA public key
-ssl Use SSL v2 padding
-raw Use no padding
-pkcs Use PKCS#1 v1.5 padding (default)
-oaep Use PKCS#1 OAEP
-sign Sign with private key
-verify Verify with public key
-asn1parse Run output through asn1parse; useful with -verify
-hexdump Hex dump output
-x931 Use ANSI X9.31 padding
-rev Reverse the order of the input buffer
-encrypt Encrypt with public key
-decrypt Decrypt with private key
-passin val Input file pass phrase source
-rand val Load the file(s) into the random number generator
-writerand outfile Write random data to the specified file
-engine val Use engine, possibly a hardware device
[root@centos85 ~]#
1. 共通鍵暗号方式による暗号化・複合化
ここでは、共通鍵暗号方式のアルゴリズムとして、AES-256-CBC(-aes-256-cbc
)を使ってみます。
1.1. パスワードのみを指定して暗号化・複合化(共通鍵はOpenSSLで自動生成される)
暗号化するファイルとして、以下のsample.txt
を用意します。
Hello, how are you?
I'm doing fine.
パスワードとして、以下のpassword.txt
を用意します。
password01
以下のコマンドで暗号化します。
openssl enc -aes-256-cbc -salt -in sample.txt -out sample.enc -pass file:password.txt
(ここではやっていませんが、openssl enc
コマンドで-base64
のおプションを付けると暗号化したファイルをBase64に変換して出力することもできます。)
[root@centos85 test]# openssl enc -aes-256-cbc -salt -in sample.txt -out sample.enc -pass file:password.txt
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
[root@centos85 test]#
sample.enc
を参照すると暗号化されています。
[root@centos85 test]# ls -l sample.enc
-rw-r--r--. 1 root root 64 7月 11 17:59 sample.enc
-rw-r--r--. 1 root root 64 7月 11 17:59 sample.enc
[root@centos85 test]# cat sample.enc
Salted__TォォHf^}QY\鳫カ?^ォ・ |鰓zリリXヨ7ハホヌミ]/オh?[root@centos85 test]#
以下のコマンドで複合化します。
openssl enc -aes-256-cbc -d -in sample.enc -out sample_dec.txt -pass file:password.txt
[root@centos85 test]# openssl enc -aes-256-cbc -d -in sample.enc -out sample_dec.txt -pass file:password.txt
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
[root@centos85 test]#
sample_dec.txt
を参照すると複合化されています。
[root@centos85 test]# ls -l sample_dec.txt
-rw-r--r--. 1 root root 36 7月 11 18:02 sample_dec.txt
[root@centos85 test]# cat sample_dec.txt
Hello, how are you?
I'm doing fine.
[root@centos85 test]#
1.2. 共通鍵を指定して暗号化・複合化
「1.1. パスワードのみを指定して暗号化・複合化」ではOpenSSLが自動的に共通鍵を設定していますが、今度はコマンドで共通鍵を設定してみます。
まず、以下のコマンドで、ランダムな鍵と初期化ベクトル(IV)を生成します。
openssl rand -base64 32 > key.base64
openssl rand -base64 16 > iv.base64
[root@centos85 test]# openssl rand -base64 32 > key.base64
[root@centos85 test]# openssl rand -base64 16 > iv.base64
[root@centos85 test]# ls -l key.base64
-rw-r--r--. 1 root root 45 7月 11 18:08 key.base64
[root@centos85 test]# cat key.base64
YouvrednwRqD8YlwQCFVUIqpMgJYKqVAf6udI53HeTY=
[root@centos85 test]# ls -l iv.base64
-rw-r--r--. 1 root root 25 7月 11 18:08 iv.base64
[root@centos85 test]# cat iv.base64
bbe/2q762efS9ITOqgWmzg==
[root@centos85 test]#
以下のコマンドで暗号化します。
openssl enc -aes-256-cbc -in sample.txt -out sample2.enc -K $(cat key.base64 | base64 -d | xxd -p -c 32 | tr -d '\n') -iv $(cat iv.base64 | base64 -d | xxd -p -c 16 | tr -d '\n')
[root@centos85 test]# openssl enc -aes-256-cbc -in sample.txt -out sample2.enc -K $(cat key.base64 | base64 -d | xxd -p -c 32 | tr -d '\n') -iv $(cat iv.base64 | base64 -d | xxd -p -c 16 | tr -d '\n')
[root@centos85 test]#
sample2.enc
を参照すると暗号化されています。
[root@centos85 test]# ls -l sample2.enc
-rw-r--r--. 1 root root 48 7月 11 22:19 sample2.enc
[root@centos85 test]# cat sample2.enc
w!?dI「
ャB+~ヨTリE(iQI・dアァ・
{胙ヘ罕[root@centos85 test]#
以下のコマンドで複合化します。
openssl enc -aes-256-cbc -d -in sample2.enc -out sample2_dec.txt -K $(cat key.base64 | base64 -d | xxd -p -c 32 | tr -d '\n') -iv $(cat iv.base64 | base64 -d | xxd -p -c 16 | tr -d '\n')
[root@centos85 test]# openssl enc -aes-256-cbc -d -in sample2.enc -out sample2_dec.txt -K $(cat key.base64 | base64 -d | xxd -p -c 32 | tr -d '\n') -iv $(cat iv.base64 | base64 -d | xxd -p -c 16 | tr -d '\n')
[root@centos85 test]#
sample2_dec.txt
を参照すると複合化されています。
[root@centos85 test]# ls -l sample2_dec.txt
-rw-r--r--. 1 root root 36 7月 11 23:58 sample2_dec.txt
[root@centos85 test]# cat sample2_dec.txt
Hello, how are you?
I'm doing fine.
[root@centos85 test]#
2. 公開鍵暗号方式による暗号化・複合化
以下のコマンドで秘密鍵を作成します。
openssl genrsa -out private-key.pem -aes-256-cbc -passout file:password.txt
[root@centos85 test]# openssl genrsa -out private-key.pem -aes-256-cbc -passout file:password.txt
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................+++++
..............+++++
e is 65537 (0x010001)
[root@centos85 test]# ls -l private-key.pem
-rw-------. 1 root root 1766 7月 12 00:27 private-key.pem
[root@centos85 test]#
以下のコマンドで公開鍵を作成します。
openssl rsa -in private-key.pem -pubout -out public-key.pem -passin file:password.txt
[root@centos85 test]# openssl rsa -in private-key.pem -pubout -out public-key.pem -passin file:password.txt
writing RSA key
[root@centos85 test]# ls -l public-key.pem
-rw-r--r--. 1 root root 451 7月 12 01:44 public-key.pem
[root@centos85 test]#
以下のコマンドで公開鍵を使って暗号化します。
openssl rsautl -encrypt -pubin -inkey public-key.pem -in sample.txt -out sample3.enc
[root@centos85 test]# openssl rsautl -encrypt -pubin -inkey public-key.pem -in sample.txt -out sample3.enc
[root@centos85 test]#
sample3.encを参照すると暗号化されています。
[root@centos85 test]# openssl rsautl -encrypt -pubin -inkey public-key.pem -in sample.txt -out sample3.enc
[root@centos85 test]# ls -l sample3.enc
-rw-r--r--. 1 root root 256 7月 12 01:46 sample3.enc
[root@centos85 test]# cat sample3.enc
S:qB&~ユ鈩w+。3'&?(・iエ,i暿ョyマチャ5Vec!(C}wH?S`P 」ト ナiョ9?^Bウ[ 莵H莉%ョ R拌ヌ/ヒ4`?鞏L膩ツ?セ,ァeァ・タ=玽bM?.鋕 ノ焄oメWコ|?Q=モDソ
ヘヒt・Hワb乕ス? ?ソoォメ.ワAキ?,ノヨリY.zマツwl艟コ・・P?ノ[root@centos85 test]#
以下のコマンドで秘密鍵を使って複合化します。
openssl rsautl -decrypt -inkey private-key.pem -in sample3.enc -out sample3_dec.txt -passin file:password.txt
[root@centos85 test]# openssl rsautl -decrypt -inkey private-key.pem -in sample3.enc -out sample3_dec.txt -passin file:password.txt
[root@centos85 test]#
sample3_dec.txt
を参照すると複合化されています。
[root@centos85 test]# cat sample3_dec.txt
Hello, how are you?
I'm doing fine.
[root@centos85 test]#
3. ハッシュ値の取得
ここではsh256
でハッシュ値を取得しています。
以下のコマンドでハッシュ値を取得します。
openssl dgst -sha256 sample.txt
[root@centos85 test]# openssl dgst -sha256 sample.txt
SHA256(sample.txt)= 4e6cbcf89bf9bf55f48dc889472a6cd26fa6374271009d4aa0701c6e0c4c9b93
[root@centos85 test]#
出力結果の通り、ファイル、ハッシュ値の順で出力されます。
出力順序を変えたい場合は、-r
オプションを付けます。
openssl dgst -sha256 -r sample.txt
[root@centos85 test]# openssl dgst -sha256 -r sample.txt
4e6cbcf89bf9bf55f48dc889472a6cd26fa6374271009d4aa0701c6e0c4c9b93 *sample.txt
[root@centos85 test]#
ハッシュ値のみ出力したい場合は、以下のコマンドを実行します。
openssl dgst -sha256 sample.txt | awk '{print $2}'
[root@centos85 test]# openssl dgst -sha256 sample.txt | awk '{print $2}'
4e6cbcf89bf9bf55f48dc889472a6cd26fa6374271009d4aa0701c6e0c4c9b93
[root@centos85 test]#
以上