skillup

技術ブログ

プログラミング全般

Encypter、Decrypeterについて

投稿日:2022年7月16日 更新日:

独自の鍵を使って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

PHPで暗号化・復号化を行う方法(OpenSSL)

base64エンコーディングについて

なんとなくバイナリ(特に画像)のエンコーディング時に使ってましたが、これを機にちょっと調査。

64の意味は・・すべてのデータを64種類のアルファベット(a~zA~z)と数字(0~9)、一部の記号(+,/)で表記するため

元々はメール送信時にバイナリデータを送受信しようと考えたときに、MIMEという規格が登場し、画像などのバイナリデータを送信するために考え出された規格のようです。

base64ってなんぞ??理解のために実装してみた

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

トランザクショントークンについて

フォーム画面で入力を行うときにはPOSTでデータを受け取ってエラーチェックしたり、データベースに入力をしたりします。 ただその時に何も考えずに安易に送信→受信の際に以下のようなトラブルがあり得ます。 …

no image

変数の役割について

前回のエントリーの主眼は変数を置くことで、適切な情報量に分割し、コードを読みやすくしよう、ということでした。 今回はそれとは少し逆の観点でして、不要な変数を削除して、コードを読みやすくしよう、というこ …

no image

シェル基礎2

シェルコマンド使い始めて数年たちますが、いまだに知らないことはおおいですし、早く知っとけばよかった的なこともたくさんあります。 そんな小ネタ集を alias よく使うコマンドを別名で登録することができ …

no image

abstract,interface,traitなどについて

昔はようわからなかったabstract(継承全般)、interface、traitの使い分けなどについて。 今の現場でいろいろと考えることがあり、自分なりにいろんな方の知見を共有できたので、メモしてお …

no image

コーディングルール 前半まとめ

リーダブルコードを3分の2ぐらいよんだので現時点でのまとめを。 Contents1 いいコードの定義2 具体的な手法2.1 変数の名称2.2 コード自体の見た目2.3 コメント2.4 制御フロー2.5 …

アーカイブ