鹿嶋神宮参拝記念QR

(自サイトでQRコードを生成するタイプ)

2024 年 5 月 18 日 9 時 13 分 25 秒 現在  [最新の情報]
create_qr.php?data=1234::202107:66487135:9bd7d386


このサイトは「.html」ですが、phpプログラムが動くように「.htaccess」を変更しています。
<FilesMatch "\.html$">
AddType application/x-httpd-php .html
</FilesMatch>

自サイトでパラメータ計算(ハッシュなど)をする場合、
phpのプログラムは、こんな感じ。
<?php header("Content-Type: text/html;charset=Shift_JIS");?>
<?php
// QRコード用情報を準備
$em = ""; //メルアド(不特定多数)
$cd = 1234; //バッジのID
$ct = 202107; //サイト側の管理コード

$ima = time();
$imahex = dechex($ima);

$dummy = 'ajkjwerh';
//ハッシュ用の共通スクランブルキー(サイトとCLIPだけが保持:非公開)

$data1 = "$cd".':'."$em".':'."$ct".':'."$imahex" ;
$data2 = "$cd".':'."$em".':'."$ct".':'."$imahex".':'."$dummy" ;

$md5h = hash('md5', $data2);
$md5s = substr($md5h,0,8); //チェックだけなので短く

// URLを定数に設定
$url = 'create_qr.php?data='.$data1.':'.$md5s ;
?>

生成するQRコードは、次のフォーマットになるようにする。

[url] ?d=[サイトID]:[ユーザメルアド]:[管理コード]:[時刻hex]:[ハッシュ値]

以下パラメータの説明
[url] → https://ivi.jp/c.php 等。情報を受け、ユーザにバッジを発行する。

[サイトID]
どのバッジを発行するのかについてのID。あらかじめCLIP側のデータベースに登録されている。このIDから、データを検索し、バッジ発行条件や、具体的なバッジ発行方法を取得する。

[ユーザメルアド]
ユーザ指定が無い場合は、クッキー等で維持するか、その場でメルアドを入力してもらうかのどちらか。バッジの設定によっては、発行不可になる。

[管理コード] (-の後ろ1文字はコマンドコード)※将来の機能拡張に利用
管理コードがある場合、バッジ発行条件をチェックし、
 →指定サーバに追加データを取得しにいく。指定が無ければ無視。
例:-a456a76 指定URLから456a76ファイルを取得。
 →違うダミーキーを使う。
  例:-d2022 2022.dat に指定されているダミーキーを使って計算する。
 →証明日時を指定する。
  例:-t1624796221 2021/06/27 21:17 に達成したことを証明。
★なお、ファイル指定やコマンドコードで、「1度しかバッジがもらえない」 「1度しかチェックができない」などが可能となります。たとえば、お店のレシートにQRコードが記載されていて、これをクリップで1度読み込むとなんらかのバッジが貰えるが、すぐにそのQRコードは無効となって2回目の読み込みは「発行済み」という表示になる。 たとえば、チケットにQRコードが記載されていて、入場チェックする人が読み込むと「入場済み」になって、2回目は利用できないなど。

[時刻hex]
発行時刻。time()で取得したデータを16進数に変換。

[ハッシュ値]

 [サイトID]:[ユーザメルアド]:[管理コード]:[時刻hex]:[ダミーキー]

をmd5ハッシュした値の最初8文字。(最初8文字が適切か要確認)
ダミーキーは、あらかじめ、CLIP側に登録しておく。
この結果、偽造は難しくなる。(ダミーを推測して総当たりすれば?)