ketyiaの作ってみた

このサイトでは作ってみたことを記事にまとめていきます!

PHPでAES-256暗号を使ってみる!

こんばんは!Keitaです~

今回は、PHPを使ってAES256という暗号を使ってみようと思います!

AES暗号とは

2000年にアメリカの連邦政府標準の暗号方式として採用された暗号です。

データの暗号化や複合に用いられる暗号鍵が、暗号文の送信者と受信者の間で共有された共通鍵暗号という方式が使われています。

共通鍵暗号としては、世界中でも広く普及しています。
使われている例として、無線LAN通信の暗号やインターネット上の通信の暗号、圧縮ファイルの暗号化と大事な場面で多く使われています!


アルゴリズムとしては、データを一定量に分けて暗号化を行うブロック暗号です。
ブロック長は128ビットで、鍵長は128、192、256ビットと選択できます。
※鍵長のビット数の応じて、AES-128、AES-192、AES-256と分類されます!

詳しいところまではここでは説明しません。。というか、できませんw
興味のある方は、色々調べてみてください!

PHPでAES暗号を使ってみる

では、PHPでAES暗号を使っていきます!

なぜPHPを採用したかはROTの時と同様の理由です!
機能が既に用意されていたからですw

ではどんな機能が用意されているのでしょうか。
それはこれです!
引用:PHP: openssl_encrypt - Manual

openssl_encrypt — データを暗号化する
openssl_encrypt
(
    string $data,
    string $cipher_algo,
    string $passphrase,
    int $options = 0,
    string $iv = "",
    string &$tag = null,
    string $aad = "",
    int $tag_length = 16
): string|false

この関数の「chipher_algo」にaes-256-cbcと指定することでAES-256の暗号を使うことができます!
cbcは暗号利用モードというものです!ブロック長よりも長いメッセージを暗号化するメカニズムです。今回はcbcを採用しています。

実際に暗号化と復号を体験してみる

では、実際に試してみたいと思います!

前回、ROTの時に使用した画面に色々付け足してを使いまわす感じでいきたいと思います!そうしましたら、こんな感じのになりましたとな!
まずは暗号化です。


次に復号してみます。


同じ値になりましたね!

一応、外部のAES暗号変換サイトであっているか見てみましょうw


同じ値が出てますね!
OKです!

ちなみに私が用意した画面内の「暗号のベクトル値」は「初期値ベクトル(IV)」という設定値で入力欄を用意しています!この値で暗号がより解読されにくくなるので、実際に運用する際は必須項目です!

下記がその例です。


最初に紹介した暗号化と復号の時と同じ文字、同じ鍵を使用しているのに暗号の値が変わりましたね!解読しにくくなりましたw

とこんな感じで、AES-256暗号を触っていきました!

同じ鍵を使用している暗号ということで、大丈夫かな~と心配になるかもしれませんが、しっかりと強固なアルゴリズムで保護されているということがわかりましたね!

ソースコードこちらに置いてあるのでよかったら見てみてください!

ここまで読んでいただきありがとうございました!

summarized in English

This blog summarizes what I tried using AES encryption in PHP.
We found that a very robust algorithm was used it.
I'm glad you had a very interesting experience!!