MakitSystem

opensslを用いた公開鍵暗号化方式の暗号化、復号化

暗号化データについて

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'))