独自の鍵を使ってencrypt,decrptメソッドを実装したので、メモを。
参考ソース
https://github.com/umanari145/admin_tool/commit/03e1158bcc857b19c54c200653d275d5e290437d
以下のソースを取り入れて実装(composerではlaravel8ではすでに取り込みができませんでした・・・)
https://github.com/taylornetwork/encrypter
encrypt,decrptの内部について
単純に別鍵でencrypt,decryptを使用したため、内部の暗号化処理そのものはいじっておらず、わからんことが多かったんですが、なんとか流れを追ってみると・・
- 暗号自体の処理はランダム文字列、文字列そのもの、署名の3つの文字を組み合わせ
- ここで使われるランダム文字列をiv(initial vector)なんていうらしい
- IV(initial vector)の意義について・・共通の鍵を使うと同じ暗号文になるのを防ぐ意図から
- 上記の組み合わせをjsonにし、base64エンコーディングさせて暗号化している
-
laravelのapp.config内部の
'cipher' => 'AES-256-CBC'
は暗号化方式 - 署名作成の際、文字列のハッシュ化で鍵を使い(laravelの場合APP_KEYがdefault),hash_hmac関数を使う(ハッシュ化に関してはsha256が一般的)
What’s behind Laravel Encryption/Decryption
base64エンコーディングについて
なんとなくバイナリ(特に画像)のエンコーディング時に使ってましたが、これを機にちょっと調査。
64の意味は・・すべてのデータを64種類のアルファベット(a~z
, A~z
)と数字(0~9
)、一部の記号(+
,/
)で表記するため
元々はメール送信時にバイナリデータを送受信しようと考えたときに、MIMEという規格が登場し、画像などのバイナリデータを送信するために考え出された規格のようです。