浏览代码

Add Text Encoding Brute Force operation

Cynser 6 年之前
父节点
当前提交
71c743ff5a

+ 1 - 0
src/core/config/Categories.json

@@ -49,6 +49,7 @@
             "Change IP format",
             "Encode text",
             "Decode text",
+            "Text Encoding Brute Force",
             "Swap endianness",
             "To MessagePack",
             "From MessagePack",

+ 52 - 0
src/core/operations/TextEncodingBruteForce.mjs

@@ -0,0 +1,52 @@
+/**
+ * @author Cynser
+ * @copyright Crown Copyright 2018
+ * @license Apache-2.0
+ */
+
+import Operation from "../Operation";
+import Utils from "../Utils";
+import cptable from "../vendor/js-codepage/cptable.js";
+import {IO_FORMAT} from "../lib/ChrEnc";
+
+/**
+ * Text Encoding Brute Force operation
+ */
+class TextEncodingBruteForce extends Operation {
+
+    /**
+     * TextEncodingBruteForce constructor
+     */
+    constructor() {
+        super();
+
+        this.name = "Text Encoding Brute Force";
+        this.module = "CharEnc";
+        this.description = "Enumerate all possible text encodings for input.";
+        this.infoURL = "https://wikipedia.org/wiki/Character_encoding";
+        this.inputType = "string";
+        this.outputType = "string";
+        this.args = [];
+    }
+
+    /**
+     * @param {string} input
+     * @param {Object[]} args
+     * @returns {string}
+     */
+    run(input, args) {
+        const output = [],
+            charSets = Object.keys(IO_FORMAT);
+
+        for (let i = 0; i < charSets.length; i++) {
+            let currentEncoding = Utils.printable(charSets[i] + ": ", false);
+            currentEncoding += cptable.utils.encode(IO_FORMAT[charSets[i]], input);
+            output.push(currentEncoding);
+        }
+
+        return output.join("\n");
+    }
+
+}
+
+export default TextEncodingBruteForce;

+ 1 - 0
test/index.mjs

@@ -74,6 +74,7 @@ import "./tests/operations/SetIntersection";
 import "./tests/operations/SetUnion";
 import "./tests/operations/StrUtils";
 import "./tests/operations/SymmetricDifference";
+import "./tests/operations/TextEncodingBruteForce";
 import "./tests/operations/ToGeohash.mjs";
 import "./tests/operations/TranslateDateTimeFormat";
 import "./tests/operations/Magic";

+ 24 - 0
test/tests/operations/TextEncodingBruteForce.mjs

@@ -0,0 +1,24 @@
+/**
+ * Text Encoding Brute Force tests.
+ *
+ * @author Cynser
+ *
+ * @copyright Crown Copyright 2018
+ * @license Apache-2.0
+ */
+import TestRegister from "../../TestRegister";
+
+TestRegister.addTests([
+    {
+        name: "Text Encoding Brute Force",
+        input: "Булкі праз ляніва сабаку.",
+        expectedMatch: /Windows\-1251 Cyrillic \(1251\): Булкі праз ляніва сабаку\./,
+        recipeConfig: [
+            {
+                op: "Text Encoding Brute Force",
+                args: [],
+            },
+        ],
+    }
+]);
+