opensslを用いた公開鍵暗号化方式の暗号化、復号化
2020/10/02
暗号化データについて
openssl を利用した公開鍵暗号化方式を利用します。
鍵の生成方法
1 下記コマンドを実行し、秘密鍵を作成します。パスフレーズを聞かれるのでパスフレーズを入力します。
openssl genrsa -out private_secure.pem -aes256 2048
2 下記コマンドを実行し、共通鍵を生成します。
openssl rsa -in private_secure.pem -pubout -out public.pem
3 生成された共通鍵をお渡しください。秘密鍵は復号化する際に必要となりますので、大切に保管ください。またパスフレーズも必要となりますので大切に保管ください。
鍵を用いたテキストの暗号化、復号化方法
1 テキストを暗号化し、base64 エンコードします
echo "暗号化する文字列" | openssl rsautl -encrypt -inkey public.pem -pubin | base64
2 暗号化されたテキストを復号化します、パスフレーズを聞かれるので、鍵を生成するさい使用したパスフレーズを入力してください。
echo "上記で出力されたbase64エンコード済みの文字列" | base64 -d | openssl rsautl -decrypt -inkey private_secure.pem
NodeJS による鍵の暗号化、復号化
下記のように暗号化、復号化ができます。
const crypto = require('crypto')
// 先ほど作成したpublickey
const publicKey = `-----BEGIN PUBLIC KEY-----
....
-----END PUBLIC KEY-----
`
const privateKey = `-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
`
const plain = '暗号化する文字列'
const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(plain))
const encryptedBase64 = encrypted.toString('base64')
console.log(encrypted)
console.log(encryptedBase64)
const decrypted = crypto.privateDecrypt(
{ key: privateKey, passphrase: '秘密鍵を作成するときに使用したパスフレーズ' },
Buffer.from(encryptedBase64, 'base64')
)
console.log(decrypted.toString('utf8'))