ketyiaの作ってみた

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

Azureの生成AIを試してみた! ~Azure OpenAI ChatGPT~



こんばんは

最近資格の勉強ばかりで、作成に力を入れられてなかったので息抜きとして作ったものについてまとめていきたいと思います!


今、プロジェクトでMSのAzure内のサービスであるOpenAIを使用して、文字生成を使用したアプリケーションを作成するという試みを行っていこうと思います!

ではスタート!!

試すシナリオ


作成するものは、簡単な情報を入力するだけで自動的に日記を作成してくれるものです!

自分、一時期毎日日記をつけていた時があるのですが、日記を一から書くのってちょっと面倒くさいと感じていました。飽き性な自分が、これを毎日続けるのはとても無理でした。。

ということで、簡単な情報で文章を自動生成してくれたら負担もなくなって、毎日続けられるのではないのかな!と文字生成を試してみます。

今回の範囲


当記事では、Python(Flask)とAzure OpenAIを組み合わせるところまでまとめます!

手順としては下記の流れです!

・Azureでサービス開始

・Flaskを構築

・FlaskにAzure OpenAIを組み込む

Azureでサービス開始


まず、Azureでサービスの開始をする必要があるのですが、OpenAIを使用できるアカウントである必要があります!(正直ここら辺詳しくないです。。すいません)

概要や作成方法の詳細は下記に記載されてます!
下記を参考に作成してみてください!
Azure OpenAI Service とは - Azure AI services | Microsoft Learn

手順としては以下の通り行いました!

①Azure OpenAI画面から作成 ⇒ 情報を入力し作成 (後々、画像生成のDELL-3を使用する関係で、リージョンはSwedenCentral)

②作成したサービスのAzure OpenAI Studioに遷移

③デプロイから、Chatを作成

④エンドポイントとAPIキーを取得

という流れです!

Flaskを構築


ローカルでプロジェクトを作成するという想定で実施していきます!

pythonをインストールしている環境で

とコマンドで入力するととりあえず環境はできます!


念のため、下記のコードを試してみましょう!


上記のコードを実行し、エラーがなければ、「127.0.0.1:5000」をブラウザで開くと下記のような画面が開いているはずです!


こんな感じのを組み合わせてアプリケーションを作っていくのがFlaskなんですね!
ちなみにFlaskを選択したのは、AzureOpenAIと相性が良さそうなんで選択しました

ここにAzureを組み合わせていきます

FlaskにAzure OpenAIを組み込む


ここからは組み合わせていきます

まずは表示するHTMLから!
「templates」フォルダーを作成して下記の2つのHTMLを作成します!

index.html


result.html


次にPythonファイルを作成します。

その前に下記をPythonでインストールしておく必要があります

コマンドプロンプトを使用して下記を入力してください


それではpythonコードを書いていきます!
もちろんAPI情報とかは消します~大課金祭りになってしまうので・・

index.py


実際に試してみましょう!!
まず入力画面です


ここの「submit」を押してみます!


できました!

これでAzureOpenAIのCHATGPTをPythonで連携することができました!

ただ、情報が推測で作成されているのでユーザの修正対応はやっぱり必要ですね。
あくまで補助してくれるツールとして活用するといいかもですね!

まとめ


最近流行りの生成AIを試してみました!

これまでのアプリは入力されたものをある程度決まった処理で結果を返すという流れだったと思いますが、生成AIによって、ユーザ各々によって結果を返すというアプローチができるようになったんだなと実感できました!

時代が動き始めてますね。。

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

Laravelでイベントの出席管理システムを作成してみる!③プログラミング

こんばんは!Keitaです。
また時間が空いてしまいましたね。。すいません!

PHPフレームワーク「Laravel」を使用した複数人体制のプロジェクトがあり、そのアウトプットとして、開発工程を記事にまとめていきたいと思います。

これまでの道筋としては、
①に作成物の紹介と開発環境を構築して、
②に設計の部分であるデータベースの設計と画面の設計を行っていきました。

今回はその続きのプログラミングを行っていこうと思います!

その前にMVCについて知っておく!

プログラミングのフレームワークといえばModel・Veiw・Controllerですね!

ModelはDBやデータの処理を行い、Veiwは画面を表示し、Controllerは制御してるんだよ~と知っておけばOKなのではないでしょうか!

下画面のような感じですね。

 


詳しく知りたい方は他サイトや書籍等で調べてみてください~

それを前提にプログラムに移っていきます!

 

(1)まずはルーティング!!


人それぞれ書き方はあると思いますが、自分はルーティングを決めることから始めていきます。

 

ファイルは「route/web.php」の中に書いていき、「このURLが要求させたらこの処理を動かすよ」というものを書いていきます。

 

今回はテンプレートを作成する処理のルーティングにフォーカスを当てて記載していきます!

Route::controller(TempleteController::class)->prefix('templete')->name('templete')->group(function() {
    Route::get('/', 'list');
    Route::get('/create', 'create')->name('.create');
    Route::post('/create', 'store')->name('.store');
    Route::get('/edit/{templete_id}', 'edit')->name('.edit');
    Route::get('/delete/{templete_id}', 'delete')->name('.delete');
    Route::post('/update/{templete_id}', 'update')->name('.update');
});


私はグループ化して記載する方法を採用してますが、色々書き方あるのでお好みのやつを採用してみてください。

参照:ルーティング 9.x Laravel

(2)次はController!!


ルーティングを決めたら次はControllerを作成していきましょう♪

コントローラーは下記のコマンドを入力することで自動的に作成されます!
今回はTempleteControllerとして作成していきます。

php artisan  make:controller TempleteController


入力したら「App\Http\Controllers\TempleteController」と作成されているはずです。

このファイルにルーティングで指定した関数を記載していきます。
※すべて書くとキリがないのでlistのみ処理を書いていきます。

class TempleteController extends Controller
{

 //一覧表示
   public function list(){
 //データベースのデータ読み出し
 $templete = Templete::all();
 //Veiwに値を渡して表示
  return view(
   'templete.list',
   ['templete' => $templete]
  );
 }

 

   //作成画面に遷移
   public function create(){}

 

 //作成画面にて作成ボタン押下
 //引数は入力された値
 public function store(Request $request){}

 

 //編集画面
 public function edit($templete_id){}

 

 //編集画面にて編集ボタン押下
 //引数は入力値、指定ID、データベース値
 public function update(Request $request,$templete_id, Templete $templete){}

 

 //削除処理
 public function delete($templete_id){}

 }


こんな感じでしょうか。
これでルーティングされたら実行される処理の型を作ることができました。

これも書き方が分かれるみたいなので、お好みなやつを選択してください~
参考:コントローラ 9.x Laravel

(3)いざModelへ!!


次はデータを司るModelの処理を書いていこうと思います。

これも下記のコマンドを打ってファイルを作成しちゃいましょう!
ちなみにマイグレートファイルを一緒に作成しちゃます!

php artisan  make:model Templete -m


マイグレートファイルはテーブルの定義を記載するファイルです。
「database\migrations」配下に作成されてるはずです!

upは作成したいことをdownは変更したいことを記載するという認識でいいのではないでしょうか。

 

return new class extends Migration
{

 public function up()
    {
        Schema::create('templetes', function (Blueprint $table) {
            $table->id('templete_id');
            $table->string('name');
            $table->integer('start_hour');
            $table->integer('start_minute');
            $table->integer('end_hour');
            $table->integer('end_minute');
            $table->integer('late_minute');
        });
    }
 public function down()
 {
  Schema::dropIfExists('templetes');
 }
}


書けたら下記コマンドでデータベースのテーブルを作成します!

php artisan migrate


次にModelの処理です。
ここは作成したテーブルの制約について記載するファイルです。

「app/Models」配下に作成されてるはずです!

class Templete extends Model
{
    protected $primaryKey = 'templete_id';
    protected $fillable = ['name'];
    use HasFactory;
}


ここも書き方色々あるので、好みのものを探してみてください!

これでデータの処理はOKです!

(3)最後はVeiw!!


最後に表示画面を作成していきます。

LaravelのテンプレートエンジンはBlade.phpというものを採用されています。
ファイルは「resources\views」配下に作成していきます。
※Templeteの場合は「templete\list.blade.php」と作成しました!

ここは本当に書き方それぞれなので、こちらを参考にしてください
参考:ビュー 9.x Laravel

<x-app-layout>
 <x-slot name="header">
  <h2 class="font-semibold text-xl text-gray-800 leading-tight">
   {{ __('Templete') }}
  </h2>
 </x-slot>
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css">
 <a href="{{ route('templete.create') }}">
  <button>create</button>
     </a>

 <table class="table table-borderless">
  <colgroup span="4"></colgroup>
   <tr>
    <th>ID</th>
    <th>名前</th>
    <th>開始時</th>
    <th>開始分</th>
    <th>終了時</th>
    <th>終了分</th>
    <th>遅刻許容分</th>
    <th>アクション</th>
   </tr>
  @foreach ($templete as $temp)
<tr>
 <td>
  <span class="text-xs text-gray-800">{{ $temp->templete_id }}</span>
 </td>
 <td>
        <span class="text-xs text-gray-800">{{ $temp->name }}</span>
    </td>
    <td>
        <span class="text-xs text-gray-800">{{ $temp->start_hour }}</span>
    </td>
    <td>
        <span class="text-xs text-gray-800">{{ $temp->start_minute }}</span>
    </td>
    <td>
        <span class="text-xs text-gray-800">{{ $temp->end_hour }}</span>
    </td>
    <td>
        <span class="text-xs text-gray-800">{{ $temp->end_minute }}</span>
    </td>
    <td>
        <span class="text-xs text-gray-800">{{ $temp->late_minute }}</span>
    </td>
    <td>
        <a href="{{ route('templete.edit', ['templete_id' =>  $temp->templete_id]) }}">
        <i class="bi bi-check2-square">
        </i><button>修正</button>
        </a>
        <a href="{{ route('templete.delete', ['templete_id' =>  $temp->templete_id]) }}">
        <i class="bi bi-trash"></i>
        <button>削除</button>
        </a>
    </td>
    </tr>
    @endforeach
</table>
</x-app-layout>


とこんな感じです!
さてちゃんと表示されているでしょうか。。(テスト用に事前にテーブルにはデータを追加しておきました!)


やった~成功ですね!

今回、すべての処理を紹介するとめっちゃくちゃ長くなるので超絞って紹介しましたが、この処理を他のテーブルでも同様に行いそれをつなげて完成させることができました!!

完成したもの


さてプロジェクトにおけるシナリオを実行してみましょう!

【シナリオ】7/16に一日中セキュリティイベントを開催することとなりました。このイベントの出席をWEBで管理したいと依頼が来ました!

さてこれを解決していきます♪

まず、イベントの時間設定(Templete)を作成します!(遅刻は考えないものとします)


これを元にイベントの日にちを作成します!

ちなみに今日は7/16なのでイベント開催日になっていますので出席登録可能な状態になっています!


ここまででイベント出席の開設は完了です!
あとは参加者が本当に出席登録ができるか見ていきましょう!


画面的にはできてますね!
では、受講者はこれを確認できるのでしょうか!!


確認できましたね!
これでゴールを達成することができました!

まだまだ改善点はたくさんありますが、ひとまず完成です!
今回の開発は大変でしたが、色々な事を学ぶことができました。。

あと、めちゃくちゃ雑になったし、長くなってしまいました。。もしここまで見てくれている人がいたら感謝です!!

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

Laravelでイベントの出席管理システムを作成してみる!②システム設計篇

こんにちは!Keitaです。

PHPフレームワーク「Laravel」を使用した複数人体制のプロジェクトがあり、そのアウトプットとして、開発工程を記事にまとめていきたいと思います。

今回は、前回の「作成物の紹介と開発環境を構築する」の続きから、設計の部分であるデータベースの設計と画面の設計についてまとめていこうと思います。

それでは、始めていきます!

データベース設計


システムの基盤となるデータベースを先に設計します!

テーブルは、下記5つ用意します!

・ユーザ //Laravelの既存認証Bleezeを使用
・時間テンプレート
・イベント
・出席パスワード
・出席者

これをうまい感じでリレーションでつないでいきます!
A5m2というアプリでER図を作成します。

 


テーブルはこのように作成していきます。

フレームワークでは、migrateという方法でテーブルを作成するので、MySQLは今回使用しません!ここは後程~

では次進みましょう!

画面設計


画面設計を行っていきます。

設計通りに作成できる保証はありませんが、こんな感じで作ろう!というのを決めておきます!

デザインはFigmaで作っていきます。
画面としては「イベント管理者」と「イベント受講者」の2パターンで作成していきます!

「イベント管理者」の画面はこのように作成しました!
興味ありましたら、こちらを見てみてください。
※画像は一部を切り取りました


「イベント受講者」はこちらです!
興味ありましたら、こちら見てみてください。


こんな感じに作成出来たら素敵ですね。。
とりあえず設計としてはこんな感じです!

では、最後にLaravelで使うDBの設定を行って、システムの設計を終了にします

LaravelのDB設定


では、DBの設定をしていきます。

ここでは、以下のことをしていきます。
・Cloude9内にMariaDBをインストール
・Laravelで使用するデータベース名とユーザを設定

コマンドに関しては下記を参考にしています。

https://github.com/yamazakidaisuke/GsCodeSample/blob/master/AmazonLinux2_PHP8_Laravel9


では、MariaDBのインストールから開始していきます。
下記コマンドを実行していきます

//MariaDBをインストール
sudo amazon-linux-extras install mariadb10.5 -y
//起動
sudo systemctl start mariadb
sudo mysql_secure_installation

//MariaDB常時起動
sudo systemctl enable mariadb


これでインストールはできるはずです。

続きまして、DBの作成とユーザの作成をします。

下記コードを実行していきます。
値は置き換えてください!

//MySQLを起動
mysql -u root -p ※-u ->ユーザ名
root パスワード
//データベース作成
create database DBNAME;
//ユーザの作成
create user USERNAME identified by 'PASSWORD';
//権限追加 ※ここでは全特権を付けますが、それぞれの判断でお願いします。
grant all on *.* to USERNAME;


とこんな感じで実行していきます!
一応、権限の確認をしておきましょう。「show grants for USERNAME」で確認できます。


ALLになっているので、権限付与はできてますね!

これで、データベースの作成からユーザの作成まで完成しました。
セキュリティ面では推奨される方法ではないですが、とりあえずご了承ください~

では、これをLaravelの設定に反映させます。

.envファイルに下記の部分を更新していきます。
値は置き換えてください。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=DBNAME
DB_USERNAME=USERNAME
DB_PASSWORD=PASSWORD


これで実行してみてください。
実行方法は下記です。

//プロジェクトフォルダに移動
cd プロジェクト名
//実行
php artisan serve --port=8080

 


こんなコマンド結果になっていたら、実行成功です。
「エラーが出ていない=設定もとりあえずOK」と現段階では考えておきましょう!

ここまでやって、やっとプログラミングの作業に入れます。
長かったですね。。

では、次回は開発部分のプログラミングをメインに行っていきます。

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

Laravelでイベントの出席管理システムを作成してみる!①環境構築篇


こんにちは!Keitaです。

今回は、PHPフレームワーク「Laravel」を使用した複数人体制のプロジェクトがあり、そのアウトプットとして、開発工程を記事にまとめていきたいと思います。

複数の記事にわたると思いますが、お付き合いいただけますと嬉しいです。

本記事では、作成物の紹介と開発環境を構築するところまでまとめていこうと思います。では、始めていきます!

作成物の紹介!


【何を作成するの?】
 出席をWEBで管理できるシステム

【なんで作るの?】
 私が経験したイベントの中で、出席で名前を一人ひとり読み上げている方法を行っているものがありました。この方法だと時間がかかりすぎるなと感じ、WEBで解決できたら楽だろうな~と感じ、作ることを決めました!

【誰向けのシステム?】
 このシステムのペルソナ(ターゲット)はイベントの管理を行う人と受講する人に絞ります。
 なので、管理者への配慮として、作業負担を少なくし誰でも使いやすいわかりやすいシステム設計を行う必要があります。受講者の配慮としては、簡潔で短時間の処理で出席登録を行えるようにシステムの設計を行う必要があると考えています。

【どのくらいの期間?】
 2、3か月で完成させる予定です。

【どのように開発するの?】
 下記のサービスや言語を使用して開発を行う予定です。

※Cloud9を選んだ理由は、複数人で開発する上で優れた環境だと思い選択しました。Docker等の選択も視野に入れましたが、短期間でメンバーと共有しやすい点では、Cloud9が今回のプロジェクトには向いていると感じました!


こんな感じで作成をしていきます。
それではさっそく、環境の構築を行っていきます!

AWSを登録してみる

一応の紹介です。。
下記サイトから登録することができます!
クレジット登録をする必要があるので、情報入力は注意深くおこなった方がいいかもですw

aws.amazon.com

 

Cloud9起動


AWSの登録が終わったら、Cloud9の作成を行っていきます!

Cloud9で、ブラウザでコードを書いたり、メンバーとリアルタイムで共有できたり、色々な言語に対応しているので様々なプロジェクトを開始する等のことができます。

詳細は下記を見てみてください~

aws.amazon.com


では作成をしていきます!

検索バーに「cloud9」と入力すれば下記が出てくると思います。これを選択します!


そこで、下記の「create enviornment」ボタンを押下することで作成を行うことができます!


そのあと入力を行い、作成完了となります。
私は、ほとんどデフォルトで行いましたが、必要に応じて変えてください!

環境一覧の「My enviornment」に作成した環境があったらOKです!
「open」で環境にアクセスすることができます!
※画像にはモザイクかけときます




これでCloud9の環境は作成できました♪

IAMでユーザを管理してみる


続いて、メンバーがCloud9にアクセスできるようにユーザの作成と権限の追加をIAMというサービスで行っていきます!

詳しくはこちら~

aws.amazon.com


機密情報が多いので手順のみの説明にさせていただきます。

①IAMにアクセス
②ユーザを作成
③グループの作成 //②で作成したユーザと許可する権限を選択する。
④メンバーにログイン情報を共有する

このようにメンバーにCloud9の権限を与えることができます!

環境の構築とユーザの管理をすることができました。
次はPHPの環境を整えます!

PHPの環境を整える!


ここでは、2つのことをやります。
PHPのversionを8に上げる
②LaravelのVersion9をインストール

それではやっていきましょう。

こちらを参考にさせていただきました!

github.com


PHPのversionを8に上げる


Cloude9の既存PHPVersionが確か7.2あたりだったかと思います。←曖昧ですいません。
このVersionを8に変更するという作業を行っていきます。

このPHPを元にフレームワークのLaravelをインストールしますので、この作業を行うことでVersion9のLaravelをインストールできるようになります!

下記のコードを実行していきます!

//packageの更新
sudo yum update -y
//既存PHPのアンインストール
sudo yum -y remove php-*
//amazon-linux-extrasを更新
sudo yum update -y amazon-linux-extras
//amazon-linux-extras内のPHP7.2を無効化
sudo amazon-linux-extras disable lamp-mariadb10.2-php7.2
//amazon-linux-extras内のPHP8を無効化
sudo amazon-linux-extras enable php8.0
//packageのインストール
sudo yum clean metadata && sudo yum install php-cli php-pdo php-fpm php-mysqlnd
sudo yum install php-cli php-common php-devel php-fpm php-gd
php-mysqlnd php-mbstring php-pdo php-xml
//serverを再起動
sudo systemctl restart httpd.service
sudo systemctl restart php-fpm.service

参考:

https://github.com/yamazakidaisuke/GsCodeSample/blob/master/AmazonLinux2_PHP8_Laravel9


ではVersionを確認してみましょう!


PHPのversionが8になってますね♪
次にLaravelのインストールを行いましょう!

②LaravelのVersion9をインストール


では次にLaravelをインストールします。
下記のコマンドを実行していきます!

//composerをインストール
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/bin/composer
//Laravelをインストール
composer create-project laravel/laravel プロジェクト名

 

参考:
https://github.com/yamazakidaisuke/GsCodeSample/blob/master/AmazonLinux2_PHP8_Laravel9


では、Versionの確認をしてみましょう!


しっかりできてますね!
これでインストール作業が完了です!

とりあえず、環境構築はこんな感じです!

次の記事では、デザイン設計とDB設計と構築についてまとめていく予定です。
↑なるべく期間を空けないで更新する予定です。。

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

PHPで公開鍵暗号を使ってみる!

こんばんわ~keitaです!

今回は、公開鍵暗号方式PHPで触っていきたいと思います!

公開鍵暗号方式とは?


公開鍵暗号方式というのは、2つの鍵(公開鍵、秘密鍵)を使用した方法です。
前提として、公開鍵は、秘密鍵で暗号化されているものです。

その公開鍵で、元のデータを暗号化します!
そうしますと、元データを確認(複号)するには、公開鍵の暗号元、秘密鍵を持っていなければならないということになります!

まとめると、公開鍵は誰にでも渡してもOKで、秘密鍵は誰にも渡してはいけないものとなります!
下の絵が簡単な流れになります!



有名なものとして、RSAがあります。

大きな数字を素因数分解させることの困難さや複雑さを暗号化するのに応用しているのがこの暗号の特徴です!※詳細は省きます!うまく説明できません。。

電子署名SSL証明)や通信の暗号化等、とても大事なところで活躍してくれている暗号です!

PHP公開鍵暗号方式を使ってみる!


用意されている関数はこちらです。
引用:PHP: openssl_public_encrypt - Manual

 

openssl_public_encrypt — 公開鍵でデータを暗号化する
openssl_public_encrypt(
    string $data,
    string &$encrypted_data,
    OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $public_key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool


プログラムを書く前に公開鍵と秘密鍵を作成しておく必要があります!
私は、Ubuntuで作成しました。

秘密鍵の作成 
openssl genrsa > ファイル名

公開鍵の作成
openssl rsa -in 秘密鍵のファイル名 -pubout -out ファイル名

 

これらで作成された公開鍵と秘密鍵のファイルをPHPで使用していきます!

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


作成した画面が下記になります。
これまで作成してきた暗号の画面を編集しながら使っています!



暗号化した結果と復号した結果を同時に出力させています!
決してテキストを表示させただけではありません。。

ちょっとわかりにくくなってしまいましたが、できました!

これまで3つの暗号に関してブログで触れましたが、しっかりとしたアルゴリズムが使われているなと感じました。

ただ、暗号化を使用していれば情報の保護はできているかと言われると、決してそうではないので、当たり前のこと(情報リテラシー)は怠らずに守っていくことが一番大事かもしれませんね!

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

summarized in English

This blog summarizes what I tried using public key cryptography in PHP.
I think It's so strong algorithm.
but I don't believe that data can be protected as long as it is encrypted.
In terms of protectiong information, I think it is very important to protect information literacy.

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!!

PHPでシーザー暗号(ROT)を使ってみる!

こんにちは!keitaです。

もう9月になってるんですね!本当に時間がたつのがはやい(-_-;)


最近立て込んでまして、ブログの更新に間をあけてしまいました。。

今回は、PHPでシーザ暗号の一つといわれている、ROTという暗号を使ってみようと思います!

 

ROT暗号とは


シーザー暗号(単換字式暗号)の一つで、アルファベットを一文字毎に指定された値をずらすという暗号になっています!

基本的にはROT13といわれ、文字を13文字ずらすのが主流だと思います!
というのもアルファベットは26文字あるので、前半13文字と後半13文字を入れ替えるという方法になります。

とROT暗号に関してはこんな感じです。

少し話が逸れますが、
今回PHPを採用したのは、私がPHPをほかの言語に比べて使い慣れているという点もありますが、PHPにはROTの関数が用意されているという点が大きいです。

暗号に関しては、用意してもらっているものを使用した方がいいと思っています!

なので、今回はPHPでいきます!

用意されている関数


このようにROT13の機能が用意されています!
参考:PHP: str_rot13 - Manual

 

str_rot13 (文字列 $string):文字列

引数に対して ROT13 エンコーディングを実行しstring、結果の文字列を返します。

ROT13 エンコーディングは、すべての文字をアルファベットの 13 桁だけシフトするだけで、非アルファベット文字はそのままにします。エンコードとデコードは同じ関数によって行われ、エンコードされた文字列を引数として渡すと元のバージョンが返されます。


しかし、今回は13以外の数字も触ってみたいので下記を使用させてもらおうと思います!

<?php
function str_rot($s$n 13) {
    static 
$letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
$n = (int)$n 26;
    if (!
$n) return $s;
    if (
$n == 13) return str_rot13($s);
    for (
$i 0$l strlen($s); $i $l$i++) {
        
$c $s[$i];
        if (
$c >= 'a' && $c <= 'z') {
            
$s[$i] = $letters[(ord($c) - 71 $n) % 26];
        } else if (
$c >= 'A' && $c <= 'Z') {
            
$s[$i] = $letters[(ord($c) - 39 $n) % 26 26];
        }
    }
    return 
$s;
}
?>


ではさっそく作成していきます!

作成したもの


値をPOSTで受け渡す一画面完結の構成にしています!
ボタン押下で、暗号化対象の文字列と暗号化された文字列を表示するようになっています!


すごく簡単ですが、こんな感じでROTを取り扱いました!

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


暗号はサービスで既存に用意してくれることが多いので、あまり気に留めず生きてきましたが、触ってみると奥深いです!

 

今回の暗号は簡単なものでしたが、今後はRSAやAES等の暗号も触っていけたらと思います!

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

Summarized in English


This time, I learned about ROT cipher in PHP programing language!
This cipher was simple but profound!
In the future, I will focus my learning on chiphers like RSA and AES etc.