From a19a07d381c8a7fde1812693e36f843a00ea457b Mon Sep 17 00:00:00 2001
From: nsfisis
Date: Sat, 11 Jan 2025 00:02:06 +0900
Subject: feat(blog/content): update post
/posts/2025-01-08/phperkaigi-2023-tokens-q1/
---
.../2025-01-08/phperkaigi-2023-tokens-q1.ndoc | 53 ++++++++++++++--------
vhosts/blog/public/atom.xml | 4 +-
.../phperkaigi-2023-tokens-q1/index.html | 43 +++++++++++-------
vhosts/blog/public/posts/atom.xml | 4 +-
vhosts/blog/public/posts/index.html | 2 +-
vhosts/blog/public/tags/conference/atom.xml | 4 +-
vhosts/blog/public/tags/conference/index.html | 2 +-
vhosts/blog/public/tags/php/atom.xml | 4 +-
vhosts/blog/public/tags/php/index.html | 2 +-
vhosts/blog/public/tags/phperkaigi/atom.xml | 4 +-
vhosts/blog/public/tags/phperkaigi/index.html | 2 +-
vhosts/blog/public/tags/piet/atom.xml | 4 +-
vhosts/blog/public/tags/piet/index.html | 2 +-
13 files changed, 78 insertions(+), 52 deletions(-)
(limited to 'vhosts/blog')
diff --git a/vhosts/blog/content/posts/2025-01-08/phperkaigi-2023-tokens-q1.ndoc b/vhosts/blog/content/posts/2025-01-08/phperkaigi-2023-tokens-q1.ndoc
index 82747627..37345849 100644
--- a/vhosts/blog/content/posts/2025-01-08/phperkaigi-2023-tokens-q1.ndoc
+++ b/vhosts/blog/content/posts/2025-01-08/phperkaigi-2023-tokens-q1.ndoc
@@ -13,6 +13,10 @@ tags = [
[[article.revisions]]
date = "2025-01-08"
remark = "公開"
+
+[[article.revisions]]
+date = "2025-01-11"
+remark = "読みやすさのため一部の文言を調整"
---
@@ -21,14 +25,16 @@ remark = "公開"
これは PHPerKaigi 2023 の記事です。今は 2025 年ですが、PHPerKaigi 2023 の記事です。
- 2023-03-23 から 2023-03-25 にかけて開催された PHPerKaigi 2023 では、弊社デジタルサーカス株式会社からトークン問題を出題した。
- 「トークン問題」とは、PHPerKaigi 2023 でおこなわれた PHPer チャレンジと呼ばれる企画で使われたもので、この記事で説明するような問題を解くと、「PHPer トークン」と呼ばれる「#」から始まる文字列を得ることができる。参加者がこのトークンを集めると、景品などが得られるという仕組みである。
+ 2023-03-23 から 2023-03-25 にかけて開催された PHPerKaigi 2023 では、PHPer チャレンジという企画がおこなわれた。
+ PHPer チャレンジとは、スポンサーのパンフレットやカンファレンス会場などから「#」記号で始まる文字列を集め、景品などを得るという企画である。
+ この文字列は「PHPer トークン」と呼ばれている。弊社デジタルサーカス株式会社からは、トークン問題という形で、PHP に関する問題を解くと PHPer トークンが得られるようになっている問題を出題した。
- PHPerKaigi 2023 の参加レポ でも書いたとおり、この年のトークン問題は「昨年の PHPerKaigi 2022 が終わった段階から作り始め、約半年かけて制作」された。PHPerKaigi 当日も PHPer チャレンジ解説セッション という形で解説の機会を頂いたのだが、せっかくなので記事の形でも残しておこうと思う。
+ PHPerKaigi 2023 の参加レポ でも書いたとおり、この年のトークン問題は「昨年の PHPerKaigi 2022 が終わった段階から作り始め、約半年かけて制作」された。
+ PHPerKaigi 当日も PHPer チャレンジ解説セッション という形で解説の機会を頂いたのだが、せっかく時間をかけて作題したので記事の形でも残しておこうと思う。
- この記事は、全5問ある中の第1問について解説する。他の問題については以下のリンクを参照のこと。
+ この記事では、全5問ある中の第1問について解説する。他の問題については以下のリンクを参照のこと。
- 第1問 (この記事)
@@ -37,6 +43,9 @@ remark = "公開"
- 第4問 (TODO: 執筆中)
- 第5問 (TODO: 執筆中)
+
+ それぞれの問題はこちらの GitHub リポジトリ (nsfisis/PHPerKaigi2023-tokens) からも閲覧できる。
+
Q1: An Art of Computer Programming
@@ -48,7 +57,7 @@ remark = "公開"
解き方
- まずはトークンを得る方法を解説なしに説明する。次のように実行する。
+ まずはトークンを得る方法を解説抜きで説明する。次のように実行する。
解説
- すでに「解き方」の節で示したように、パスワードである PHPer トークンは「#iwillblog」で、これを与えると正解のトークンが得られる。
+ すでに「解き方」の節で示したように、パスワードである PHPer トークンは「#iwillblog」である。これを与えて実行すると正解のトークンが得られる。
このパスワードの選択にはとある事情がある。
@@ -128,7 +137,7 @@ remark = "公開"
CLI で実行する場合、PHP タグよりも前にあるデータは標準出力へそのまま出力される。
- この2つの事実を使って、この画像ファイルは次のような構造になっていた。
+ この画像ファイルは次のような構造になっていた。
- マジックナンバーなど
@@ -139,7 +148,10 @@ remark = "公開"
- 通常の PHP ソースコード
- strings コマンドを使うと、隠されたデータを浮き彫りにできる。
+ PNG ファイルとして読むときは PNG フッタ以降は無視され、PHP スクリプトとして読むときは PHP タグ以前が無視されるという仕掛けである。
+
+
+ strings コマンドを使うと、隠されたデータを簡単に閲覧できる。
- IHDR や IEND は PNG 画像の一部である。<?php からが実際のプログラムになっている。
+ IHDR や IEND が PNG 画像の一部で、<?php からが実際のプログラムになっている。
もちろんこれを PHP プログラムとして動かすと、PHP タグより前にある PNG 画像としてのデータはそのまま標準出力へと出力されてしまう。
- それを防ぐため、QR コードを読み込んだときの実行方法には
+ それを防ぐため、QR コードを読み込んだときの実行方法
- 標準出力を捨てるよう >/dev/null と指定されている。
+ には標準出力を捨てるよう >/dev/null と指定されている。
なお、このように PNG 画像などに本来のデータとは異なる別のデータを隠すことを「ステガノグラフィ」(Wikipedia「ステガノグラフィー」) と呼ぶ。
@@ -176,8 +188,9 @@ remark = "公開"
diff --git a/vhosts/blog/public/atom.xml b/vhosts/blog/public/atom.xml
index 2b15bcab..1d15fca5 100644
--- a/vhosts/blog/public/atom.xml
+++ b/vhosts/blog/public/atom.xml
@@ -7,14 +7,14 @@
nsfisis
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
urn:uuid:ce8f20e8-c79f-48f8-982d-53edd4d20483
PHPerKaigi 2023 トークン問題解説 (1/5)
PHPerKaigi 2023 でデジタルサーカス株式会社から出題した問題を解説する。全5問中の第1問。
2025-01-08T00:00:00+09:00
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
urn:uuid:d7f98354-83fc-4cf1-8769-2784f0ebb6c8
diff --git a/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html b/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html
index 02fa17d7..7b7151ca 100644
--- a/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html
+++ b/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html
@@ -65,6 +65,9 @@
: 公開
+
+ : 読みやすさのため一部の文言を調整
+
@@ -79,15 +82,15 @@
- 2023-03-23 から 2023-03-25 にかけて開催された PHPerKaigi 2023 では、弊社デジタルサーカス株式会社からトークン問題を出題した。 「トークン問題」とは、PHPerKaigi 2023 でおこなわれた PHPer チャレンジと呼ばれる企画で使われたもので、この記事で説明するような問題を解くと、「PHPer トークン」と呼ばれる「#」から始まる文字列を得ることができる。参加者がこのトークンを集めると、景品などが得られるという仕組みである。
+ 2023-03-23 から 2023-03-25 にかけて開催された PHPerKaigi 2023 では、PHPer チャレンジという企画がおこなわれた。 PHPer チャレンジとは、スポンサーのパンフレットやカンファレンス会場などから「#」記号で始まる文字列を集め、景品などを得るという企画である。 この文字列は「PHPer トークン」と呼ばれている。弊社デジタルサーカス株式会社からは、トークン問題という形で、PHP に関する問題を解くと PHPer トークンが得られるようになっている問題を出題した。
- PHPerKaigi 2023 の参加レポ でも書いたとおり、この年のトークン問題は「昨年の PHPerKaigi 2022 が終わった段階から作り始め、約半年かけて制作」された。PHPerKaigi 当日も PHPer チャレンジ解説セッション という形で解説の機会を頂いたのだが、せっかくなので記事の形でも残しておこうと思う。
+ PHPerKaigi 2023 の参加レポ でも書いたとおり、この年のトークン問題は「昨年の PHPerKaigi 2022 が終わった段階から作り始め、約半年かけて制作」された。 PHPerKaigi 当日も PHPer チャレンジ解説セッション という形で解説の機会を頂いたのだが、せっかく時間をかけて作題したので記事の形でも残しておこうと思う。
- この記事は、全5問ある中の第1問について解説する。他の問題については以下のリンクを参照のこと。
+ この記事では、全5問ある中の第1問について解説する。他の問題については以下のリンクを参照のこと。
@@ -111,6 +114,10 @@
第5問 (TODO: 執筆中)
+
+
+ それぞれの問題はこちらの GitHub リポジトリ (nsfisis/PHPerKaigi2023-tokens) からも閲覧できる。
+
@@ -126,7 +133,7 @@
- まずはトークンを得る方法を解説なしに説明する。次のように実行する。
+ まずはトークンを得る方法を解説抜きで説明する。次のように実行する。
$ echo "#iwillblog" | php Q1.png >/dev/null
@@ -139,7 +146,7 @@
diff --git a/vhosts/blog/public/tags/phperkaigi/atom.xml b/vhosts/blog/public/tags/phperkaigi/atom.xml
index 869c31b0..06699bd8 100644
--- a/vhosts/blog/public/tags/phperkaigi/atom.xml
+++ b/vhosts/blog/public/tags/phperkaigi/atom.xml
@@ -7,14 +7,14 @@
nsfisis
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
urn:uuid:ce8f20e8-c79f-48f8-982d-53edd4d20483
PHPerKaigi 2023 トークン問題解説 (1/5)
PHPerKaigi 2023 でデジタルサーカス株式会社から出題した問題を解説する。全5問中の第1問。
2025-01-08T00:00:00+09:00
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
urn:uuid:750be5c8-ca52-4cbd-86fe-5645b06bde95
diff --git a/vhosts/blog/public/tags/phperkaigi/index.html b/vhosts/blog/public/tags/phperkaigi/index.html
index 95846dec..37be1248 100644
--- a/vhosts/blog/public/tags/phperkaigi/index.html
+++ b/vhosts/blog/public/tags/phperkaigi/index.html
@@ -54,7 +54,7 @@
diff --git a/vhosts/blog/public/tags/piet/atom.xml b/vhosts/blog/public/tags/piet/atom.xml
index 93716407..c3b39cd5 100644
--- a/vhosts/blog/public/tags/piet/atom.xml
+++ b/vhosts/blog/public/tags/piet/atom.xml
@@ -7,13 +7,13 @@
nsfisis
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
urn:uuid:ce8f20e8-c79f-48f8-982d-53edd4d20483
PHPerKaigi 2023 トークン問題解説 (1/5)
PHPerKaigi 2023 でデジタルサーカス株式会社から出題した問題を解説する。全5問中の第1問。
2025-01-08T00:00:00+09:00
- 2025-01-08T00:00:00+09:00
+ 2025-01-11T00:00:00+09:00
diff --git a/vhosts/blog/public/tags/piet/index.html b/vhosts/blog/public/tags/piet/index.html
index 7557abf1..063c6b15 100644
--- a/vhosts/blog/public/tags/piet/index.html
+++ b/vhosts/blog/public/tags/piet/index.html
@@ -54,7 +54,7 @@
--
cgit v1.2.3-70-g09d2