Chromebookで作るPWAアプリ日記7
こんにちは、junkawaです。
日本語の名詞からパスフレーズを生成するアプリを作りました。
単語数を4〜6で選べます。ローマ字表記はヘボン式を選べます。
リスト中の単語数は60,477個であり、2^15.884 = 約60472なので、ランダムに一つ単語を選ぶとエントロピーは15.884あるといえます。
ここで6単語をそれぞれランダムに選ぶと、エントロピーは95.304 (15.884*6)となります。
下記サイトの通りに考えると、これはアルファベット大文字小文字、数字、10個の記号からランダムに選択した15文字のパスワード以上の強度と言えます。
ネタ元はこちらのxkcdpass。
xkcd の当該記事の日本語訳。
日本語の名詞リスト
この記事に、リストの作成方法を載せています。
パスワード生成アプリ
ソースコードはこちら。
ポイントだけ紹介します。
乱数
const rand = window.crypto.getRandomValues(new Uint32Array(1))[0]/65536/65536;
crypto.getRandomValues()を使って、上記の様に0以上1未満の値を取得します。
この値にリスト中の単語数60,477を掛け、Math.floor()して小数部を切り捨てた値が、ランダムに選択したリスト中の単語のインデックスとなります。
ヘボン式
リストは非ヘボン式のローマ字で作成しました。これをヘボン式に変換します。
str.replace(/si/g, 'shi').replace(/ti/g, 'chi').replace(/tu/g, 'tsu').replace(/(?<!s)hu/g, 'fu').replace(/zi/g, 'ji').replace(/di/g, 'ji').replace(/du/g, 'zu');
replace(/(?<!s)hu/g, 'fu') では、huをfuに置き換えます。ただし、shuはそのままです。(?<!s)で、huの直前にsがある時にマッチしない、を表します。
否定後読みというそうです。
直前に→後読み
マッチしない→否定
jQueryのチェックボックスのチェックの有無
$("#hepburn").prop("checked");
idがhepburnのチェックボックスがチェックされているかどうかを返します。
ご覧下さりありがとうございます。いただいたサポートは図書館への交通費などに使わせていただきます。