見出し画像

コピペするだけ!簡単「現代版エニグマ」

スキ制限がつらい…😭


ブックマークに置いとくだけ!

コピペするだけの簡単小道具!

Geminiで簡単!ツール作成!

一発作成プロンプトも紹介!


暗号と聞いてパッと思い出すものって何かありますか?
第二次世界大戦時、ドイツが使用していた「エニグマ」
言葉だけ知っていても、どんなものなのかって知らなかったです。
Geminiさんに作れるのか聞いてみたら一言「作れます」
だったらちょっと作ってみてほしい!


今回はせっかくなので趣向を変えてGeminiさんによるエニグマの簡単ロジック説明!

① 文字ごとに回路が変わる「ローター(歯車)」の再現

エニグマの最大の強みは、「同じ文字を打っても、毎回違う文字に化ける」点でした。「あああ」と打つと、1文字目を打った瞬間に内部の歯車がカチッと回り、2文字目、3文字目では電気の通り道(暗号化のルール)がリアルタイムに変わる仕組みです。

プログラム内では、文字の位置(何文字目かを表す i)を使って、1文字進むごとに計算に使う数値をドカンと変動させています。

これにより、「同じ『あ』という文字が連続しても、全く別の化け文字になる」というエニグマ最大のトリックを再現しています。

② 暗号と復号が同じになる「リフレクター(反転鏡)」の再現

エニグマには、電気信号を突き当たりで折り返して戻す「リフレクター」という天才的なパーツが組み込まれていました。

これにより、「ある設定で『A』が『B』になったなら、全く同じ設定のまま『B』を入力すれば必ず『A』に戻る」という、「暗号化」と「復号(元に戻す)」を1つの回路で同時にこなす唯一無二の性質を持っていました。

プログラム内では、これをデジタル暗号の王道である「XOR(排他的論理和:^)」という計算で再現しています。

「ある数字に対して、特定の数字を2回掛け合わせると、絶対に元の数字に戻る」という数学的トリックです。

※ 今回は日本語含むマルチバイト文字に対応し、さらに、本来のエニグマが持っていた問題である「絶対に元の文字と同じ文字に変換されない」というリフレクターの仕組みに由来するバグをXORを使用することで修正してあるそうな。


コピーしたテキストをブックマークぽちっとなで暗号化、複合!

コピーしている内容が切り替わる!


🛠️ 使い方(スマホ版)

1. 適当なページをブックマークする

まずは、今見ているこのページなど、何でもいいので一度ブックマークに登録します。

2. 「編集」を開く

ブックマークバーにある今作ったブックマークを長押しして、「編集」を選択します。

3. 内容を書き換える

表示された設定画面で、以下の2箇所を変更して保存します。

  • 名前: (自分が分かりやすい名前)

  • URL: もともと入っているURLをすべて消して、コードを貼り付ける

ブックマークを押すだけ簡単!


📋これを貼ります!

javascript:(function(){navigator.clipboard.readText().then(function(t){if(!t)return;var res='';for(var i=0;i<t.length;i++){res+=String.fromCharCode(t.charCodeAt(i)^((i+1)*12345&65535));}var isDe=/[ぁ-ん]/.test(res);var msg=isDe?%27%F0%9F%94%93【復号(元に戻しました)】%27:%27%F0%9F%94%92【暗号化(暗号にしました)】%27;navigator.clipboard.writeText(res).then(function(){alert(%27⚙%EF%B8%8F エニグマ %27+msg+%27\n\n▼ 処理後のテキスト ▼\n%27+res);});});})();

一発作成プロンプト!

※ プロンプトは書いてもらったものの、今回は試せてません💦

# 目的
iPadのSafariやスマホでも確実に動作する、「クリップボードのテキストを読み込み、エニグマ暗号機の仕様(インデックスに応じた動的シフトと反転可逆性)を模したロジックで暗号化・復号し、クリップボードに自動書き戻しする」ブックマークレットを生成してください。

# コードの制約(超厳守)
1. 画面を汚さない(DOM操作禁止)ため、ページへの要素追加は一切行わないこと。
2. 「navigator.clipboard.readText()」を用いて、クリップボード内のテキストを直接読み込むこと。空の場合は処理を抜けること。
3. ループ処理内で、文字のインデックス(i)を用いた動的な値と、文字コード(charCodeAt)に対してビット演算のXOR(^)および「&65535」のマスクを行い、日本語や絵文字でも絶対に文字化け・クラッシュしない可逆暗号ロジックを実装すること。
4. 【重要】ポップアップによる待機時間を無くし、Safariのクリップボード書き込み制限を回避するため、0か1かのモード選択は行わずワンタップで処理を完了させること。
5. 【重要】暗号化か復号かを自動判別するため、変換後のテキストにひらがなが含まれるか(/[ぁ-ん]/.test())を判定し、含まれれば「🔓【復号(元に戻しました)】」、含まれなければ「🔒【暗号化(暗号にしました)】」とアラートのタイトルを動的に切り替えること。
6. 変換結果を「navigator.clipboard.writeText()」でクリップボードに書き戻した直後の「.then()」の中で、上記で判定したタイトルと処理後のテキストを「alert()」で表示すること。
7. 全体を「javascript:(function(){ ... })();」で包み、改行やスペースを排除した【完全な1行のコード】として出力すること。
8. %(パーセント記号)やコード内での直接の改行、async/awaitは使用禁止。

# 出力形式
コードブロックに1行のコードだけを出力してください。余計な解説文や挨拶は省いてください。

この記事について!

今更ながら、Gemini 3分クッキング記事について注意点など|へろん


何でもどうぞ!答えられるものは全て答えます!

設置はお済みですか?図らずも人の庭でnote質問箱を試す!|へろん


メンバーシップ始めました!

まだ手探りですが、ご要望/無茶振り/質問、可能な限りお受けします!


参加させて頂いています!是非チェックしてみてください😆


有料記事、今回は問題提起と警告!

note生活1ヶ月の総括記事を書きました!大事な部分は全て無料公開中
何を考え何をしてきたのか、500人記念のワンコインで公開します!


小道具すべて、こちらに置きました!


☕ お時間あればこちらも是非!


気に入ったらスキ、フォローよろしくお願いします!
note外から見にきてくださったかたも、もしよければハートマーク押して頂けたら励みになります😊


いいなと思ったら応援しよう!