2次元コードの作成と解読


CTFで2次元コードが出題されることがあり、自分の勉強のために2次元コードを調べてみました。調べてわかったのですが、とにかく2次元コードは種類が多いので、本投稿では有名なコードにしぼり記載します。合わせて、各種コードの作成方法と解読方法も載せておきます。なお、これらのコマンド/プログラムの動作確認はUbuntu20.04で行っています。

コードの種類

https://qiita.comを各種2次元コードでコード化してみました。

コード名 コード 規格
qrcode ISO/IEC18004:2015
azteccode ISO/IEC24778:2008
datamatrix ISO/IEC16022:2006
maxicode ISO/IEC16023:2000
pdf417 ISO/IEC15438:2015

コードの作成

treepoemというライブラリを使います。

  • インストール
インストール
pip install treepoem
  • 作成
bashの例
treepoem -o qrcode.png -t qrcode "https://qiita.com"
pythonの例
import treepoem
code = treepoem.generate_barcode(barcode_type='qrcode',data='https://qiita.com')
code.save('qrcode.png')

※treepoemにはもっと多くのコードが入っていますので、興味があれば調べてみるといいかもしれません。

コードの解読

ZXing(ゼブラクロッシング)はGoogle社製のオープンソースのライブラリで、1次元・2次元コードの解読ができます。今回はこれを使います。

  • インストール

ZXingはJAVA上で動作するためJAVAのインストールが必要です。

インストール
apt install default-jre
pip install zxing
  • 解読

解読のプログラムを記載します。コードの種類判別は自動です。

bashの例
zxing code.png
pythonの例
import zxing
reader = zxing.BarCodeReader()
code = reader.decode('code.png')
print(code.raw)