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

Eclipseのシンタックスハイライト

先日PCがクラッシュした時にEclipseを入れなおしたんですが、普段あまり意識せずに使っていたのでhtmlのシンタックスハイライトをだすためだけに2時間ぐらい費やしました・・・自戒の意味も込めてメモ …

no image

サロゲートキーと主キーに関して

今までも何度か触れたサロゲートキーと主キーに関して。 今までの参考リンク 論理設計のグレーノウハウ サロゲートキー サロゲートキーに関して 主にシステム設計的な考察が多かったので、今回はユースケースか …

no image

エラーレポーティングサービス Sentryについて

リリースした後、運用段階に入ると定期的にバグ報告が上がってきます。 本来はリリース前に研修テストをすべきなんですが、そんな余裕ないことも多い(汗) で、そんな時に大事なのが エラーを気づけること 対処 …

no image

画面テストのツールに関して

Unitテストに関してはxUnit一択だと思いますが、UI系のテストツールについて。 IDE(コードを書かずにすむマクロ系)に関して全てChromeで動くことを確認しています。 Contents1 ツ …

no image

型の意識について(ValueObjectの活用など)

現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。 現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたか …

アーカイブ