Shogo's Blog

Feb 28, 2019 - 1 minute read - Comments -

新元号の候補約4510万件が漏洩!!

平成の次の元号候補、4510万4656件の漏洩が確認された。

政府は「新元号、情報管理を徹底へ 漏洩なら差し替え」との方針を示しており、 早急な差し替え対応を行うと思われる。


2019-04-01 追記:

追記ここまで


と、まあ、二番煎じなわけですが。

ただ、このツイートのリプライのもあるとおり漏洩漏れがあるようですし、 新元号に使われる可能性のある漢字は常用漢字ではない可能性だってあると僕は考えいます。 だって、お国のやることですからね。下手したら改元に合わせて「常用漢字の見直しもやる」ということだって考えられます。

というわけで、僕は ShiftJIS, EUC-JP で表現可能な文字列まで範囲を広げることにしました。 Unicodeへの統一が進んでいるとはいえ、 ShiftJIS, ECU-JP で動いているレガシーなシステムもあるでしょうし、この範囲に収めるだろうなという予想です。

ShiftJISからUnicodeへの変換には規則性がないので、変換テーブルを使う必要があります。 Goのコードを漁った ら以下の変換表を参照していたので、これを利用しました。

非漢字も含まれているので、雑に漢字を絞ったあと、

curl https://encoding.spec.whatwg.org/index-jis0208.txt | grep CJK | cut -f3 | cut -d' ' -f1 | sort | uniq > kanji.txt

直積列挙スクリプトに突っ込めば出来上がり。

import sys
import itertools

a = [l.rstrip() for l in sys.stdin]

for l in itertools.product(a, a):
    print(''.join(l))
python product.py < kanji.txt > product.txt 

本当は全部Shell芸したかったけど、Pythonスクリプトに頼ってしまいました。 もっと強い芸人さん、よろしくおねがいします。

あと、途中で「候補の漢字が重複している」との報告を受けて調べたのですが、ShiftJIS->Unicodeの変換は一意に決まるけど、Unicode->ShiftJISは一意に決まらない、という闇があるようです。 もうUnicodeの闇でお腹いっぱいなので深くは調べていません。


最後に

念のため「どうせ公表後に新元号を追加したデーターを作っただけだろ!」と言われないよう、ハッシュ値を貼っておきます。