見出し画像

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のチェックボックスがチェックされているかどうかを返します。

ご覧下さりありがとうございます。いただいたサポートは図書館への交通費などに使わせていただきます。