ホモグリフ文字変換
Hello WorldはНеⅼⅼо Ԝо𝗋ⅼԁになります。見た目は同じでも、10文字がキリル文字やギリシャ文字などのそっくりな字形です。フィッシング検証用の見本作りや、怪しいユーザー名をASCIIに戻して見破るのに使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello World
- 計算モード
- Encode
- 結果
- Неⅼⅼо Ԝо𝗋ⅼԁ
- 方向
- encode
- 対応付け結果
- 10
- 未割り当て数
- 1
ホモグリフ文字変換は、通常のラテン文字と数字を、一般的なフォントではほぼ同じに見えるUnicode文字(キリルのa・o、ギリシャのnu・kappa、全角数字など紛らわしい字形)に置き換えます。見た目は読めるまま、コードポイントはもはやプレーンASCIIではありません。セキュリティ分析者はフィッシングやブランドなりすましのラボ用サンプル作成に、書き手はスタイル用のそっくり表現に、サポート窓口は怪しい貼り付けを検索可能なASCIIへ正規化する逆方向に使います。本機能は両方向を決定的に実装します。encodeは各ラテン文字・数字を優先ホモグリフへ、decodeはより広い既知そっくり字形表をプレーンASCIIへ戻し、autoは専用ホモグリフがあるとき経路を選びます。空白・句読点・絵文字など未マップ文字はそのまま通り、unmapped報告に一度だけ現れ、何が残ったか把握できます。
ホモグリフ対応の仕組みと応答に含まれる内容
ホモグリフとは、日常の書体でラテン文字や数字と見た目が紛らわしい、別スクリプトやブロックの文字です。encodeは文字列内の各Unicodeスカラーを走査し、表に優先エントリがあるプレーンなA–Z・a–z・0–9を置換します。例としてラテンo→キリルо、ラテンp→キリルр、ラテンx→キリルх、数字→全角形などです。
それ以外はそのままです。decodeは同じ文字列を走査し、既知の紛らわしい字形をプレーンASCIIの対へ戻します。逆方向表はencode表より広いため、encodeが生成しない追加のギリシャ・アルメニア・キリルそっくり字形もきれいに畳み込まれます。
文字順は決して逆転しません。変わるのはコードポイントの同一性だけであり、これが上下反転や文字列逆転ジェネレータとの違いです。
入力の仕方とよくある落とし穴
任意でmodeにencode、decode、autoを送れます。省略時の既定はautoです。autoは、プレーンなマップキーとしては現れず紛らわしい形だけに出る排他的ホモグリフがあるときdecodeし、なければencodeします。
方向を考えずに混在テキストを貼る場合の妥当な既定です。検証失敗は前払い残高を消費しません。絵文字・CJK表意文字・句読点など表に無い文字は元の形のまま結果に残り、unmappedに一意に列挙されるため、文字列全体を拒否せずカバレッジを監査できます。
出力を暗号化や資格情報の隠蔽手段と見なさないでください。方式を知る者は逆変換でき、セキュリティ製品は隠蔽のencodeではなく正規化のdecodeを使うべきです。検索意図がホモグリフ変換・紛らわしいUnicode・ラテンそっくり文字そのものであるときはこのランディングを優先し、全角のみ・Fraktur・上下反転ツールは別意図のため分離してください。
実務での使い方と注意点
セキュリティチームやレッドチームのラボは、意識啓発と検知器回帰試験のために紛らわしいブランド・ドメインのそっくりサンプルを生成し、取得文字列をチケットやSIEM検索向けASCIIへdecodeします。ブランド保護フローは、ユーザー向け文字列を正規化ASCII形と比較し、コードポイントが異なっても視覚的なりすましを際立たせます。
コンテンツやSNS担当は、プラットフォームがUnicodeは受けてもカスタムフォントは受けないとき、ハンドルやキャプション用の装飾的そっくり文字を求めることがあります。教員は視覚的類似がコードポイント同一性ではないことを示し、後の単元で真の暗号変換と対比します。
後段で正規合成が必要なときだけUnicode NFKC正規化と組み合わせ、ホモグリフ変換は独自ランディングに置き、SEO意図を鋭く保ちencodeとdecodeのそっくり挙動を期待どおり届けてください。
活用例
フィッシングとブランドそっくりラボ
意識啓発用に紛らわしいブランド・ドメインのサンプルを作り、取得した貼り付けをチケットや検索向けプレーンASCIIへdecodeします。
怪しいUnicode貼り付けの正規化
ユーザー名やメッセージ内のギリシャ・キリル・全角そっくり字形を、モデレーションとSIEM向けのプレーンラテン文字・数字へマップします。
よくある質問
ラテン文字をホモグリフに変換するには?
modeをencodeにするかautoのままにします。resultに紛らわしいUnicode文字列が入ります。
ホモグリフをプレーンASCIIへ戻すには?
紛らわしい文字列をtextに入れmode decodeで送るか、排他的ホモグリフが既にあるときはautoを使います。resultが復元されたプレーンASCIIです。
textが空の場合は?
変換するプレーンラテン・数字またはホモグリフ文字を少なくとも1文字指定してください。
対応表にない文字はどうなりますか?
空白や句読点、絵文字、漢字など対応表にない文字は、そのまま結果に残ります。置き換えられなかった文字は重複なく一覧で示されるので、どこが変わっていないか確認できます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/homoglyph \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World"}'const res = await fetch("https://api.kit.forhosting.com/enc/homoglyph", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello World"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/homoglyph",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello World"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/homoglyph", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello World"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello World"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/homoglyph", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "Hello World"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.homoglyph",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
ホモグリフ対応の仕組みと応答に含まれる内容
成功時、応答は元のtextをエコーし、変換後文字列をresult、要求した操作をmode、解決したencode/decode経路をdirection、表ヒット数をmapped、通過文字の一意集合をunmapped_countとunmapped、結果のスカラー長をlength、methodをhomoglyphに設定して返します。
入力フィールド、モード、検証規則、よくある落とし穴
変換または正規化したいサンプル・ユーザー名・ブランド文字列・ラボ用ペイロードを、必須文字列フィールドtextに送ってください。同じフィールドにinput、value、data、message、stringなどの別名も使えるため、既存ペイロード形を再利用できます。方向の別名op、operation、directionや、enc、dec、to_homo、to_ascii、obfuscate、normalizeなどの短縮値も受け付けます。text欠落、文字列でない値、空文字列、未知のmode、文書化された最大長超過はinvalid_inputと明確な英語メッセージで失敗します。
実務フロー、料金、セキュリティラボ、APIの制限
ライブラリなしの一回限りの確認にはブラウザ内ツールを、バックエンド・サーバーレス関数・SDKが残高下の安定契約を要するときはAPIを呼び、成功1件あたり$0.002です。ペイロードはWorker isolateのitem呼び出しに適した通常のテキストサイズに留め、本ツールはサンプルやキャプション向けであり数メガバイトのバイナリ用ではありません。
連携の活用例
教室とCI用fixture
教員は視覚的紛らわしい字形とコードポイントの違いを示し、技術者は決定的なencode/decode出力を自動テストに固定します。
技術的な質問
マッピングのない文字はどうなりますか?
結果に元の形のまま残ります。一意の未マップ文字はunmappedに列挙されunmapped_countで数えられるので、何がそのまま残ったか分かります。
ホモグリフ文字変換は無料ですか?
ブラウザツールは端末上で無料です。API呼び出しは前払いKIT残高を使い、成功1件あたり$0.002です。検証失敗は課金されません。