Railsで簡単に可逆暗号をする方法
とりあえずrails c
で試す。
$ rails c
プレーンテキスト(message)、鍵(secret)を以下のようにする。
message = 'Qiitaきーたキータ'
secret = SecureRandom::hex(128)
# => "b67f94a18fe7a18682d99bb78db61d9cf867d6bf09d4fa93785bdaabf61834a88e2621b296c042a72bd6da913cfaa1c0ea5f5efb978bc7118d9174f18cfca091656fb3e1d2553cfe6d5e7626a2c914ab4e82feb46c4704655dff76cf6629cb9e76e841a0fa099c687ac02fd49622c7604d2d7acd386ff4caff70a566dbea541a"
encryptorの宣言(AES-256, Cipher Block Chainingで暗号化)
encryptor = ::ActiveSupport::MessageEncryptor.new(secret, cipher: 'aes-256-cbc')
暗号化(encrypt_and_sign
)
encrypt_message = encryptor.encrypt_and_sign(message)
# => M3daVDM1ZmlSSFV6d2doSW84U1pPRUpCWnZ3aWROdy92REJoc3lvbVlVUEdkNHdRayt2c3hLeTlWREFoR0hWVy0teW92TzAwWEVPbE5sRzZJTW5RQ3AwUT09--28a03ca3ae1530c57f8a07a72d2ea13fe68aff4e
シグネチャ付きなのに注意。
復号化(decrypt_and_verify
)
encryptor.decrypt_and_verify(encrypt_message)
# => "Qiitaきーたキータ"
※シグネチャが不正な場合はActiveSupport::MessageVerifier::InvalidSignature
がraiseされる
encryptor.decrypt_and_verify(encrypt_message + 'a')
# ActiveSupport::MessageVerifier::InvalidSignature: ActiveSupport::MessageVerifier::InvalidSignature
なお、別プラットフォームとの交換をする場合は、シグネチャ部分を実装するか、シグネチャなし(encrypt_and_sign
ではなく、encrypt
)にする
使用可能な暗号化方式の調べ方
$ openssl list-cipher-commands
異なるプラットフォームの場合は、OpenSSLのバージョンに注意すること。