logo hsb.horse
← Zur Blog-Übersicht

Blog

TypeScript-Implementierung der Steganographie mithilfe von Variantenselektoren

Eine TypeScript-Implementierung einer Steganographie-Methode, die den Variantenselektor von Unicode nutzt, um versteckte, unsichtbare Zeichenfolgen in Text einzubetten.

Veröffentlicht:

Eigentlich wollte ich Steganographie mit Unicode-Variantenselektoren: Wie man geheime Zeichenfolgen im Text versteckt #JavaScript - Qiita ausprobieren, aber ich wollte es in TypeScript implementieren und dafür sorgen, dass es richtig funktioniert.

Also habe ich es umgesetzt.

Code

class Steganography {
static #components = {
VS_BEGIN: 0xfe00,
STR_EMPTY: "",
REPLACER: /\uFEFF[\uFE00-\uFE0F]+/u,
toHex(value: number) {
return value.toString(16);
},
toHexDecimal(str: string): number {
return Number.parseInt(str, 16);
},
encode: {
PREFIX: "\u{FEFF}"
}
}
static encode(body: string, hidden: string): string {
const { VS_BEGIN, STR_EMPTY, encode, toHex, toHexDecimal } = this.#components;
return encode.PREFIX + [...hidden].flatMap(c => [...toHex(c.charCodeAt(0))])
.map((s) => String.fromCodePoint(VS_BEGIN + toHexDecimal(s)))
.join(STR_EMPTY) + body
}
static decode(value: string): [body: string, hidden: string] {
const { VS_BEGIN, STR_EMPTY, REPLACER, toHex, toHexDecimal } = this.#components;
let hidden = STR_EMPTY;
const body = value.replace(REPLACER, ([_, ...variationSelectors]) => {
hidden += variationSelectors
.map((c) => toHex(c.codePointAt(0)! - VS_BEGIN))
.reduce<string[][]>((acc, _, index, arr) => {
return index % 2 === 0 ? [...acc, arr.slice(index, index + 2)] : acc;
}, [])
.map(([a, b]) => String.fromCharCode(toHexDecimal(a + b)))
.join(STR_EMPTY);
return STR_EMPTY;
});
return [body, hidden]
}
}

Punkte

  1. Variationsauswahl: Verwenden Sie den Bereich U+FE00-U+FE0F
  2. ZERO WIDTH NO-BREAK SPACE(U+FEFF): Versteckter String-Startmarker
  3. Kodierung: Konvertieren Sie Zeichen in HEX und drücken Sie sie mit der Variantenauswahl aus
  4. Dekodieren: Mit regulärem Ausdruck extrahieren und Originalzeichenfolge wiederherstellen

Anwendungsbeispiel

const body = "公開されるテキスト";
const hidden = "秘密のメッセージ";
const encoded = Steganography.encode(body, hidden);
console.log(encoded); // 見た目は「公開されるテキスト」
const [decodedBody, decodedHidden] = Steganography.decode(encoded);
console.log(decodedBody); // "公開されるテキスト"
console.log(decodedHidden); // "秘密のメッセージ"

Zusammenfassung

Durch die Nutzung des Glyphenselektors von Unicode können Sie geheime Zeichenfolgen auf eine Weise in Text einbetten, die visuell nicht erkennbar ist.

Ungeachtet seiner Praktikabilität ist es ein gutes Thema, um zu lernen, wie Unicode funktioniert.