最近、無線通信でよく使われているNATOフォネティックコードを見て、そこで使われている言葉を日本語に翻訳したら面白い暗号システムになれるかもしれないと、考えがありました。

 

 


図1 NATOフォネティックコード

 

下記の通り解読表を作りました。

 

A
B
C
D
E
F
G
H 宿
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

 

最初の暗号システムでは漢字一文字じゃありませんが、やはり漢字一文字にするともっと面白いかと思って、今の通り、漢字一文字にしました。

 

その漢字を選んだ理由は下記の通りです。

 

 

A AはAlfa(アルファ)、あるいは、Alpha、Alphabetなので、「字」という漢字に決まりました。
B BはBravo(「ブラボー」)なので、「善哉」という言葉にして、「善」という漢字に決まりました。
C CはCharlie(「チャーリー」)です。Charlieは軍隊で「敵」を意味するので、「敵」という漢字に決まりました。
D DはDelta(「デルタ」)なので、「三角形」という意味を取り、「三」という漢字に決まりました。
E EはEcho(「エコー」)、あるいは「こだま」なので、漢字一文字にし、「声」という漢字に決まりました。
F FはFoxtrot(「フォックストロット」)です。「フォックストロット」は社交ダンスの一つなので、「舞」という漢字に決まりました。
G GはGolf(「ゴルフ」)なので、「球」という漢字に決まりました。
H HはHotel(「ホテル」)なので、「宿」という漢字に決まりました。
I IはIndia、あるいは「インド」、漢字で書くと「印度」なので、「印」という漢字に決まりました。
J JはJuliett(「ジュリエット」)です。「ジュリエット」は「ロメオとジュリエット」という物語のヒロインなので、「女」という漢字に決まりました。
K KはKilo(「キロ」)です。「キロ」はSI(国際単位系)では「千」という意味を持つ接頭辞なので、「千」という漢字に決まりました。
L LはLima(「リマ」)です。「リマ」はペルーの首都です。ペルーには有名なナスカ地上「絵」があるので、「絵」という漢字に決まりました。
M Mは(「マイク」)です。「マイク」は「録」音の時用いられるので、「録」という漢字に決まりました。
N NはNovember(「ノベンバー」)、あるいは「十一月」です。「一」だらけなので、「独」という漢字に決まりました。
O Oは(「オスカー」)です。第二次世界大戦時、日本の陸軍航空隊には中島キー43という戦闘機がありました。その戦闘機は日本で隼と呼ばれていたが、欧米ではOscarと呼ばれていたので、「隼」という漢字に決まりました。
P PはPapa(「パパ」)なので、「父」という漢字に決まりました。
Q QはQuebec(「ケベック」)です。「ケベック」はカナダの州の一つで、「楓」がカナダを代表することができるので、「楓」という漢字に決まりました。
R RはRomeo(「ロメオ」)です。「ロメオ」は「ロメオとジュリエット」という物語の主人公なので、「男」という漢字に決まりました。
S SはSierra(「シエラ」)、あるいは「山」脈なので、「山」という漢字に決まりました。
T TはTango(「タンゴ」)で、「タンゴ」は軍事通信で標的、あるいは「的」という意味を持つので、「的」という漢字に決まりました。
U UはUniform(「ユニフォーム」)、あるいは「同じ」なので、「同」という漢字に決まりました。
V VはVictor(「ヴィクター」)、あるいは「勝利」なので、「勝」という漢字に決まりました。
W WはWhiskey(「ウイスキー」)、お酒の一種なので、「酒」という漢字に決まりました。
X XはX-ray(「エックス線」)です。「エックス線」はよく空港や病院などで「検」査に使用されているので、「検」という漢字に決まりました。
Y YはYankee(「ヤンキー」)です。「ヤンキー」は「アメリカ人」、あるいは「米」国人の意味を持つので、「米」という漢字に決まりました。
Z ZはZulu(「ズールー」)、あるいは「ズールー族」です。「ズールー族」は南アフリカの民族の一つで、南アフリカは喜望峰、直訳すると「希」望岬が有名なので、「希」という漢字に決まりました。

 

直訳することはあまり難しくありませんが、地名・人名の翻訳は比較的に難しいで、漢字一文字にするためにたくさん悩みました。

 

こうやって暗号システムを作り上げましたが、変換機、あるいは翻訳機がなければ、使うのが面倒くさいじゃないですか。よって、簡単なHTMLとJavascriptを使って、ウェブベースの変換機を作りました。

 

リンクはこちらです。

 

変換を可能にするため、すべての漢字を順によって、配列に書き込みました。

図2 漢字の配列

 

暗号化するときは、英文字だけを選び、それのアスキーコードとAのアスキーコード(65)の差を配列での添字とし、暗号化することが簡単にできます。

図3 暗号化のための関数

 

解読するときは、特定の漢字を選び、それの配列での添字と65(Aのアスキーコード)の合計を、アスキーコードとして英文字として出力すると、解読も簡単にできます。

図4 暗号解読のための関数

 

モードが二つあるので、インターフェースを作る時、状態変数がいるが、関係していない関数にはその変数が見られてはいけないので、インターフェースで使われている関数をクロージャ、関数を戻る関数の戻り値というものにしました。その関数では戻る関数の内部の変数が見えますが、外部では一切見えないので、それが妥当だと思います。

 

図5 インターフェースの関数