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

フレームワークのマイナーバージョンチェンジの影響に関して

ここ1年ぐらいPHPのフレームワークはLaravelを使っていますが、マイナーバージョンの影響に悩まされることがたまにあります。 以前、遭遇した事象としてはログイン連携が急にできなくなりました。 La …

no image

テストコードの考え方

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

no image

新しいプロジェクトに入った時にやること

新しいプロジェクトに入った時に最初にすべきことややっておくことなど Contents1 仕様理解編1.1 ユーザーの行動遷移の理解1.2 キー系のデータの理解1.3 データグルーピング1.4 サンプル …

no image

命名規則について その2

リーダブルコードネタ第3段。 前回のエントリーに引き続き、名称の大切さについて Contents1 あいまいな名前はNG!1.1 限界値はmaxかminを使う1.2 範囲を指定するときはfirstとl …

no image

1度に1つのことを

今回のリーダブルコードの概念はやや抽象的。 要は一度に行うタスクは1つにする、というところがポイントになります。 そのための手法として下記のようなことを上げています。 コードが行っているタスクをすべて …

アーカイブ