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

読みやすいコードについて

コードリーディングにおいて聖典となっているリーダブルコードについて読んでいこうかと。 ただ読んでいくだけではつまらないので、自分なりの考え方も書いていきます。 Contents1 優れたコードの定義1 …

no image

テストコードの考え方

一般的なプログラマにとって日々の業務で何がいやかというと、 理不尽な納期 むちゃくちゃな仕様変更 頻発するバグ・不具合 であることは異論がないでしょう。仕様変更や納期などは自分で何とかしがたい部分もあ …

no image

ログのまとめに関して

何回か書いたログの設計方針に関して再度復習。 ログ設計指針について ログで大事なことを再度復習 DEBUG(SQLやパラメータ情報など詳細な情報までだす)、INFO(メソッドの詳細情報、開始と終了)、 …

no image

シェルスクリプト ファイル読み込み・switchなど

以前のエントリーに引き続き、シェルスクリプトでログを解析する処理があってそこで覚えたことなどをまとめておきます。 Contents1 ファイル読み込み2 switch文2.1 基本パターン2.2 条件 …

no image

Simple Factoryパターンについて

今回はデザインパターンの一種であるSimple Factoryパターンに関して。 Contents1 Simple Factoryパターンとは2 サンプルコード3 解説 Simple Factoryパ …

アーカイブ