diff --git a/.gitignore b/.gitignore
new file mode 100755
index 00000000..482be5c7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+npm-debug.log
+build/dev
+docs/*
+!docs/*.conf.json
+!docs/*.ico
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100755
index 00000000..807853d5
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,451 @@
+module.exports = function(grunt) {
+ grunt.file.defaultEncoding = "utf8";
+ grunt.file.preserveBOM = false;
+
+ // Tasks
+ grunt.registerTask("dev",
+ "A persistent task which creates a development build whenever source files are modified.",
+ ["clean:dev", "concat:css", "concat:js", "copy:html_dev", "copy:static_dev", "chmod:build", "watch"]);
+
+ grunt.registerTask("prod",
+ "Creates a production-ready build. Use the --msg flag to add a compile message.",
+ ["jshint", "exec:stats", "clean", "jsdoc", "concat", "copy", "cssmin", "uglify:prod", "inline", "htmlmin", "chmod"]);
+
+ grunt.registerTask("docs",
+ "Compiles documentation in the /docs directory.",
+ ["clean:docs", "jsdoc", "chmod:docs"]);
+
+ grunt.registerTask("stats",
+ "Provides statistics about the code base such as how many lines there are as well as details of file sizes before and after compression.",
+ ["concat:js", "uglify:prod", "exec:stats", "exec:repo_size", "exec:display_stats"]);
+
+ grunt.registerTask("default",
+ "Lints the code base and shows stats",
+ ["jshint", "exec:stats", "exec:display_stats"]);
+
+ grunt.registerTask("doc", "docs");
+ grunt.registerTask("lint", "jshint");
+
+
+ // Load tasks provided by each plugin
+ grunt.loadNpmTasks("grunt-contrib-jshint");
+ grunt.loadNpmTasks("grunt-jsdoc");
+ grunt.loadNpmTasks("grunt-contrib-clean");
+ grunt.loadNpmTasks("grunt-contrib-concat");
+ grunt.loadNpmTasks("grunt-contrib-copy");
+ grunt.loadNpmTasks("grunt-contrib-uglify");
+ grunt.loadNpmTasks("grunt-contrib-cssmin");
+ grunt.loadNpmTasks("grunt-contrib-htmlmin");
+ grunt.loadNpmTasks("grunt-inline-alt");
+ grunt.loadNpmTasks("grunt-chmod");
+ grunt.loadNpmTasks("grunt-exec");
+ grunt.loadNpmTasks("grunt-contrib-watch");
+
+
+ // JS includes
+ var js_files = [
+ // Third party framework libraries
+ "src/js/lib/jquery-2.1.1.js",
+ "src/js/lib/bootstrap-3.3.6.js",
+ "src/js/lib/split.js",
+ "src/js/lib/bootstrap-switch.js",
+ "src/js/lib/yahoo.js",
+ "src/js/lib/snowfall.jquery.js",
+
+ // Third party operation libraries
+ "src/js/lib/cryptojs/core.js",
+ "src/js/lib/cryptojs/x64-core.js",
+ "src/js/lib/cryptojs/enc-base64.js",
+ "src/js/lib/cryptojs/enc-utf16.js",
+ "src/js/lib/cryptojs/md5.js",
+ "src/js/lib/cryptojs/evpkdf.js",
+ "src/js/lib/cryptojs/cipher-core.js",
+ "src/js/lib/cryptojs/mode-cfb.js",
+ "src/js/lib/cryptojs/mode-ctr-gladman.js",
+ "src/js/lib/cryptojs/mode-ctr.js",
+ "src/js/lib/cryptojs/mode-ecb.js",
+ "src/js/lib/cryptojs/mode-ofb.js",
+ "src/js/lib/cryptojs/format-hex.js",
+ "src/js/lib/cryptojs/lib-typedarrays.js",
+ "src/js/lib/cryptojs/pad-ansix923.js",
+ "src/js/lib/cryptojs/pad-iso10126.js",
+ "src/js/lib/cryptojs/pad-iso97971.js",
+ "src/js/lib/cryptojs/pad-nopadding.js",
+ "src/js/lib/cryptojs/pad-zeropadding.js",
+ "src/js/lib/cryptojs/aes.js",
+ "src/js/lib/cryptojs/hmac.js",
+ "src/js/lib/cryptojs/rabbit-legacy.js",
+ "src/js/lib/cryptojs/rabbit.js",
+ "src/js/lib/cryptojs/ripemd160.js",
+ "src/js/lib/cryptojs/sha1.js",
+ "src/js/lib/cryptojs/sha256.js",
+ "src/js/lib/cryptojs/sha224.js",
+ "src/js/lib/cryptojs/sha512.js",
+ "src/js/lib/cryptojs/sha384.js",
+ "src/js/lib/cryptojs/sha3.js",
+ "src/js/lib/cryptojs/tripledes.js",
+ "src/js/lib/cryptojs/rc4.js",
+ "src/js/lib/cryptojs/pbkdf2.js",
+ "src/js/lib/jsbn/jsbn.js",
+ "src/js/lib/jsbn/jsbn2.js",
+ "src/js/lib/jsbn/base64.js",
+ "src/js/lib/jsbn/ec.js",
+ "src/js/lib/jsbn/prng4.js",
+ "src/js/lib/jsbn/rng.js",
+ "src/js/lib/jsbn/rsa.js",
+ "src/js/lib/jsbn/sec.js",
+ "src/js/lib/jsrasign/asn1-1.0.js",
+ "src/js/lib/jsrasign/asn1hex-1.1.js",
+ "src/js/lib/jsrasign/asn1x509-1.0.js",
+ "src/js/lib/jsrasign/base64x-1.1.js",
+ "src/js/lib/jsrasign/crypto-1.1.js",
+ "src/js/lib/jsrasign/dsa-modified-1.0.js",
+ "src/js/lib/jsrasign/ecdsa-modified-1.0.js",
+ "src/js/lib/jsrasign/ecparam-1.0.js",
+ "src/js/lib/jsrasign/keyutil-1.0.js",
+ "src/js/lib/jsrasign/x509-1.1.js",
+ "src/js/lib/blowfish.dojo.js",
+ "src/js/lib/rawdeflate.js",
+ "src/js/lib/rawinflate.js",
+ "src/js/lib/zip.js",
+ "src/js/lib/unzip.js",
+ "src/js/lib/zlib_and_gzip.js",
+ "src/js/lib/bzip2.js",
+ "src/js/lib/punycode.js",
+ "src/js/lib/uas_parser.js",
+ "src/js/lib/esprima.js",
+ "src/js/lib/escodegen.browser.js",
+ "src/js/lib/esmangle.min.js",
+ "src/js/lib/diff.js",
+ "src/js/lib/moment.js",
+ "src/js/lib/moment-timezone.js",
+ "src/js/lib/prettify.js",
+ "src/js/lib/vkbeautify.js",
+ "src/js/lib/Sortable.js",
+ "src/js/lib/bootstrap-colorpicker.js",
+
+ // Custom libraries
+ "src/js/lib/canvas_components.js",
+
+ // Utility functions
+ "src/js/core/Utils.js",
+
+ // Operation objects
+ "src/js/operations/*.js",
+
+ // Core framework objects
+ "src/js/core/*.js",
+ "src/js/config/Categories.js",
+ "src/js/config/OperationConfig.js",
+
+ // HTML view objects
+ "src/js/views/html/*.js",
+ "!src/js/views/html/main.js",
+
+ // Start the app!
+ "src/js/views/html/main.js",
+ ];
+
+ var banner = '/**\n\
+ * CyberChef - The Cyber Swiss Army Knife\n\
+ *\n\
+ * @copyright Crown Copyright 2016\n\
+ * @license Apache-2.0\n\
+ *\n\
+ * Copyright 2016 Crown Copyright\n\
+ *\n\
+ * Licensed under the Apache License, Version 2.0 (the "License");\n\
+ * you may not use this file except in compliance with the License.\n\
+ * You may obtain a copy of the License at\n\
+ *\n\
+ * http://www.apache.org/licenses/LICENSE-2.0\n\
+ *\n\
+ * Unless required by applicable law or agreed to in writing, software\n\
+ * distributed under the License is distributed on an "AS IS" BASIS,\n\
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\
+ * See the License for the specific language governing permissions and\n\
+ * limitations under the License.\n\
+ */\n';
+
+ var template_options = {
+ data: {
+ compile_msg: grunt.option("compile-msg") || grunt.option("msg") || "",
+ codebase_stats: grunt.file.read("src/static/stats.txt").split("\n").join(" ")
+ }
+ };
+
+ // Project configuration
+ grunt.initConfig({
+ jshint: {
+ options: {
+ jshintrc: "src/js/.jshintrc"
+ },
+ gruntfile: ["Gruntfile.js"],
+ core: ["src/js/core/**/*.js"],
+ config: ["src/js/config/**/*.js"],
+ views: ["src/js/views/**/*.js"],
+ operations: ["src/js/operations/**/*.js"],
+ },
+ jsdoc: {
+ options: {
+ destination: "docs",
+ template: "node_modules/ink-docstrap/template",
+ recurse: true,
+ readme: "./README.md",
+ configure: "docs/jsdoc.conf.json"
+ },
+ all: {
+ src: [
+ "src/js/**/*.js",
+ "!src/js/lib/**/*",
+ ],
+ }
+ },
+ clean: {
+ dev: ["build/dev/*"],
+ prod: ["build/prod/*"],
+ docs: ["docs/*", "!docs/*.conf.json", "!docs/*.ico"],
+ },
+ concat: {
+ options: {
+ process: template_options
+ },
+ css: {
+ options: {
+ banner: banner.replace(/\/\*\*/g, "/*!"),
+ process: function(content, srcpath) {
+ // Change special comments from /** to /*! to comply with cssmin
+ content = content.replace(/^\/\*\* /g, "/*! ");
+ return grunt.template.process(content);
+ }
+ },
+ src: [
+ "src/css/lib/**/*.css",
+ "src/css/structure/**/*.css",
+ "src/css/themes/classic.css"
+ ],
+ dest: "build/dev/styles.css"
+ },
+ js: {
+ options: {
+ banner: '"use strict";\n'
+ },
+ src: js_files,
+ dest: "build/dev/scripts.js"
+ }
+ },
+ copy: {
+ html_dev: {
+ options: {
+ process: function(content, srcpath) {
+ return grunt.template.process(content, template_options);
+ }
+ },
+ src: "src/html/index.html",
+ dest: "build/dev/index.html"
+ },
+ html_prod: {
+ options: {
+ process: function(content, srcpath) {
+ return grunt.template.process(content, template_options);
+ }
+ },
+ src: "src/html/index.html",
+ dest: "build/prod/index.html"
+ },
+ html_inline: {
+ options: {
+ process: function(content, srcpath) {
+ // TODO: Do all this in Jade
+ content = content.replace(
+ 'Download CyberChef',
+ 'Compile time: ' + grunt.template.today("dd/mm/yyyy HH:MM:ss") + ' UTC');
+ return grunt.template.process(content, template_options);
+ }
+ },
+ src: "src/html/index.html",
+ dest: "build/prod/cyberchef.htm"
+ },
+ static_dev: {
+ files: [
+ {
+ expand: true,
+ cwd: "src/static/",
+ src: [
+ "**/*",
+ "**/.*",
+ "!stats.txt"
+ ],
+ dest: "build/dev/"
+ }
+ ]
+ },
+ static_prod: {
+ files: [
+ {
+ expand: true,
+ cwd: "src/static/",
+ src: [
+ "**/*",
+ "**/.*",
+ "!stats.txt"
+ ],
+ dest: "build/prod/"
+ }
+ ]
+ }
+ },
+ uglify: {
+ options: {
+ preserveComments: function(node, comment) {
+ if (comment.value.indexOf("* @license") === 0) return true;
+ return false;
+ },
+ screwIE8: true,
+ ASCIIOnly: true,
+ beautify: {
+ beautify: false,
+ inline_script: true,
+ ascii_only: true,
+ screw_ie8: true
+ },
+ compress: {
+ screw_ie8: true
+ },
+ banner: banner
+ },
+ prod: {
+ src: "build/dev/scripts.js",
+ dest: "build/prod/scripts.js"
+ }
+ },
+ cssmin: {
+ prod: {
+ src: "build/dev/styles.css",
+ dest: "build/prod/styles.css"
+ }
+ },
+ htmlmin: {
+ prod: {
+ options: {
+ removeComments: true,
+ collapseWhitespace: true,
+ minifyJS: true,
+ minifyCSS: true
+ },
+ src: "build/prod/index.html",
+ dest: "build/prod/index.html"
+ },
+ inline: {
+ options: {
+ removeComments: true,
+ collapseWhitespace: true,
+ minifyJS: false,
+ minifyCSS: false
+ },
+ src: "build/prod/cyberchef.htm",
+ dest: "build/prod/cyberchef.htm"
+ }
+ },
+ inline: {
+ options: {
+ tag: "",
+ inlineTagAttributes: {
+ js: "type='application/javascript'",
+ css: "type='text/css'"
+ }
+ },
+ compiled: {
+ src: "build/prod/cyberchef.htm",
+ dest: "build/prod/cyberchef.htm"
+ },
+ prod: {
+ options: {
+ tag: "__inline"
+ },
+ src: "build/prod/index.html",
+ dest: "build/prod/index.html"
+ }
+ },
+ chmod: {
+ build: {
+ options: {
+ mode: "755",
+ },
+ src: ["build/**/*", "build/**/.htaccess", "build/"]
+ },
+ docs: {
+ options: {
+ mode: "755",
+ },
+ src: ["docs/**/*", "docs/"]
+ }
+ },
+ exec: {
+ repo_size: {
+ command: [
+ "git ls-files | wc -l | xargs printf '\n%b\ttracked files\n'",
+ "du -hs | egrep -o '^[^\t]*' | xargs printf '%b\trepository size\n'"
+ ].join(";"),
+ stderr: false
+ },
+ stats: {
+ command: "rm src/static/stats.txt;" +
+ [
+ "ls src/ -R1 | grep '^$' -v | grep ':$' -v | wc -l | xargs printf '%b\tsource files\n'",
+ "find src/ -regex '.*\..*' -print | xargs cat | wc -l | xargs printf '%b\tlines\n'",
+ "du -hs src/ | pcregrep -o '^[^\t]*' | xargs printf '%b\tsize\n'",
+
+ "ls src/js/ -R1 | grep '\.js$' | wc -l | xargs printf '\n%b\tJavaScript source files\n'",
+ "find src/js/ -regex '.*\.js' -print | xargs cat | wc -l | xargs printf '%b\tlines\n'",
+ "find src/js/ -regex '.*\.js' -exec du -hcs {} \+ | tail -n1 | egrep -o '^[^\t]*' | xargs printf '%b\tsize\n'",
+
+ "find src/js/ -regex '.*/lib/.*\.js' -print | wc -l | xargs printf '\n%b\tthird party JavaScript source files\n'",
+ "find src/js/ -regex '.*/lib/.*\.js' -print | xargs cat | wc -l | xargs printf '%b\tlines\n'",
+ "find src/js/ -regex '.*/lib/.*\.js' -exec du -hcs {} \+ | tail -n1 | egrep -o '^[^\t]*' | xargs printf '%b\tsize\n'",
+
+ "find src/js/ -regex '.*\.js' -not -regex '.*/lib/.*' -print | wc -l | xargs printf '\n%b\tfirst party JavaScript source files\n'",
+ "find src/js/ -regex '.*\.js' -not -regex '.*/lib/.*' -print | xargs cat | wc -l | xargs printf '%b\tlines\n'",
+ "find src/js/ -regex '.*\.js' -not -regex '.*/lib/.*' -exec du -hcs {} \+ | tail -n1 | egrep -o '^[^\t]*' | xargs printf '%b\tsize\n'",
+
+ "du build/dev/scripts.js -h | egrep -o '^[^\t]*' | xargs printf '\n%b\tuncompressed JavaScript size\n'",
+ "du build/prod/scripts.js -h | egrep -o '^[^\t]*' | xargs printf '%b\tcompressed JavaScript size\n'",
+
+ "grep -E '^\\s+name: ' src/js/config/Categories.js | wc -l | xargs printf '\n%b\tcategories\n'",
+ "grep -E '^\\s+\"[A-Za-z0-9 \\-]+\": {' src/js/config/OperationConfig.js | wc -l | xargs printf '%b\toperations\n'",
+
+ ].join(" >> src/static/stats.txt;") + " >> src/static/stats.txt;",
+ stderr: false
+ },
+ display_stats: {
+ command: "cat src/static/stats.txt"
+ },
+ clean_git: {
+ command: "git gc --prune=now --aggressive"
+ },
+ },
+ watch: {
+ css: {
+ files: "src/css/**/*.css",
+ tasks: ["concat:css", "chmod:build"]
+ },
+ js: {
+ files: "src/js/**/*.js",
+ tasks: ["concat:js", "chmod:build"]
+ },
+ html: {
+ files: "src/html/**/*.html",
+ tasks: ["copy:html_dev", "chmod:build"]
+ },
+ static: {
+ files: ["src/static/**/*", "src/static/**/.*"],
+ tasks: ["copy:static_dev", "chmod:build"]
+ },
+ grunt: {
+ files: "Gruntfile.js",
+ tasks: ["clean:dev", "concat:css", "concat:js", "copy:html_dev", "copy:static_dev", "chmod:build"]
+ }
+ },
+ });
+
+};
diff --git a/LICENSE b/LICENSE
new file mode 100755
index 00000000..7a4a3ea2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100755
index 00000000..145e83d4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,89 @@
+# CyberChef
+
+####*The Cyber Swiss Army Knife*
+
+CyberChef is a simple, intuitive web app for carrying out all manner of "cyber" operations within a web browser. These operations include creating hexdumps, simple encoding like XOR or Base64, more complex encryption like AES, DES and Blowfish, data compression and decompression, calculating hashes and checksums, IPv6 and X.509 parsing, and much more.
+
+The tool is designed to enable both technical and non-technical analysts to manipulate data in complex ways without having to deal with complex tools or algorithms. It was conceived, designed, built and incrementally improved by an analyst in their 10% innovation time over several years. Every effort has been made to structure the code in a readable and extendable format, however it should be noted that the analyst is not a professional developer and the code has not been peer-reviewed for compliance with a formal specification.
+
+## Live demo
+
+CyberChef is still under active development. As a result, it shouldn't be considered a finished product. There is still testing and bug fixing to do, new features to be added and additional documentation to write. Please contribute!
+
+Cryptographic operations in CyberChef should not be relied upon to provide security in any situation. No guarantee is offered for their correctness.
+
+[A live demo can be found here][1] - have fun!
+Note: Use Chrome or Firefox, see the Browser Support section below for details.
+
+
+## How it works
+
+There are four main areas in CyberChef:
+
+ 1. The **input** box in the top right, where you can paste, type or drag the data you want to operate on.
+ 2. The **output** box in the bottom right, where the outcome of the specified processing will be displayed.
+ 3. The **operations** list on the far left, where you can find all the operations that CyberChef is capable of in categorised lists, or by searching.
+ 4. The **recipe** area in the middle, where you drag the operations that you want to use and specify arguments and options.
+
+You can use as many operations as you like in simple or complex ways. Some examples are as follows:
+
+ - [Decode a Base64-encoded string][2]
+ - [Convert a date and time to a different time zone][3]
+ - [Parse a Teredo IPv6 address][4]
+ - [Convert data from a hexdump, then decompress][5]
+ - [Display multiple timestamps as full dates][6]
+ - [Carry out different operations on data of different types][7]
+
+
+## Features
+
+ - Drag and drop
+ - Operations can be dragged in and out of the recipe list, or reorganised.
+ - Files can be dragged over the input box to load them directly.
+ - Auto Bake
+ - Whenever you modify the input or the recipe, CyberChef will automatically “bake” for you and produce the output immediately.
+ - This can be turned off and operated manually if it is affecting performance (if the input is very large, for instance).
+ - If any bake takes longer than 200 milliseconds, auto bake will be switched off automatically to prevent further performance issues.
+ - Breakpoints
+ - You can set breakpoints on any operation in your recipe to pause execution before running it.
+ - You can also step through the recipe one operation at a time to see what the data looks like at each stage.
+ - Save and load recipes
+ - If you come up with an awesome recipe that you know you’ll want to use again, just click save and add it to your local storage. It'll be waiting for you next time you visit CyberChef.
+ - You can also copy a URL which includes your recipe and input which can be shared with others.
+ - Search
+ - If you know the name of the operation you want or a word associated with it, start typing it into the search field and any matching operations will immediately be shown.
+ - Highlighting
+ - When you highlight text in the input or output, the offset and length values will be displayed and, if possible, the corresponding data will be highlighted in the output or input respectively (example: [highlight the word 'question' in the input to see where it appears in the output][8]).
+ - Save to file and load from file
+ - You can save the output to a file at any time or load a file by dragging and dropping it into the input field (note that files larger than about 500kb may cause your browser to hang or even crash due to the way that browsers handle large amounts of textual data).
+ - CyberChef is entirely client-side
+ - It should be noted that none of your input or recipe configuration is ever sent to the CyberChef web server - all processing is carried out within your browser, on your own computer.
+ - Due to this feature, CyberChef can be compiled into a single HTML file. You can download this file and drop it into a virtual machine, share it with other people, or use it independently on your desktop.
+
+
+## Browser support
+
+CyberChef works well in modern versions of Google Chrome and Mozilla Firefox.
+
+To aid in the efficient development of new features and operations, there has been no attempt to maintain support for any version of Microsoft Internet Explorer.
+
+Microsoft Edge is currently unsupported, but if anyone would like to contribute compatibility fixes, they would be appreciated.
+
+
+## Contributing
+
+An installation walkthrough, how-to guides for adding new operations, descriptions of the repository structure, available data types and coding conventions can all be found in the project [wiki pages](https://github.com/gchq/CyberChef/wiki).
+
+ - Sign the [GCHQ Contributor Licence Agreement](https://github.com/gchq/Gaffer/wiki/GCHQ-OSS-Contributor-License-Agreement-V1.0)
+ - Push your changes to your fork.
+ - Submit a pull request.
+
+
+ [1]: https://gchq.github.io/CyberChef
+ [2]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22From%20Base64%22%2C%22args%22%3A%5B%22A-Za-z0-9%2B%2F%3D%22%2Ctrue%5D%7D%5D&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
+ [3]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22Translate%20DateTime%20Format%22%2C%22args%22%3A%5B%22Standard%20date%20and%20time%22%2C%22DD%2FMM%2FYYYY%20HH%3Amm%3Ass%22%2C%22UTC%22%2C%22dddd%20Do%20MMMM%20YYYY%20HH%3Amm%3Ass%20Z%20z%22%2C%22Australia%2FQueensland%22%5D%7D%5D&input=MTUvMDYvMjAxNSAyMDo0NTowMA
+ [4]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22Parse%20IPv6%20address%22%2C%22args%22%3A%5B%5D%7D%5D&input=MjAwMTowMDAwOjQxMzY6ZTM3ODo4MDAwOjYzYmY6M2ZmZjpmZGQy
+ [5]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22From%20Hexdump%22%2C%22args%22%3A%5B%5D%7D%2C%7B%22op%22%3A%22Gunzip%22%2C%22args%22%3A%5B%5D%7D%5D&input=MDAwMDAwMDAgIDFmIDhiIDA4IDAwIDEyIGJjIGYzIDU3IDAwIGZmIDBkIGM3IGMxIDA5IDAwIDIwICB8Li4uLi6881cu%2Fy7HwS4uIHwKMDAwMDAwMTAgIDA4IDA1IGQwIDU1IGZlIDA0IDJkIGQzIDA0IDFmIGNhIDhjIDQ0IDIxIDViIGZmICB8Li7QVf4uLdMuLsouRCFb%2F3wKMDAwMDAwMjAgIDYwIGM3IGQ3IDAzIDE2IGJlIDQwIDFmIDc4IDRhIDNmIDA5IDg5IDBiIDlhIDdkICB8YMfXLi6%2BQC54Sj8uLi4ufXwKMDAwMDAwMzAgIDRlIGM4IDRlIDZkIDA1IDFlIDAxIDhiIDRjIDI0IDAwIDAwIDAwICAgICAgICAgICB8TshObS4uLi5MJC4uLnw
+ [6]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22Fork%22%2C%22args%22%3A%5B%22%5C%5Cn%22%2C%22%5C%5Cn%22%5D%7D%2C%7B%22op%22%3A%22From%20UNIX%20Timestamp%22%2C%22args%22%3A%5B%22Seconds%20(s)%22%5D%7D%5D&input=OTc4MzQ2ODAwCjEwMTI2NTEyMDAKMTA0NjY5NjQwMAoxMDgxMDg3MjAwCjExMTUzMDUyMDAKMTE0OTYwOTYwMA
+ [7]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22Fork%22%2C%22args%22%3A%5B%22%5C%5Cn%22%2C%22%5C%5Cn%22%5D%7D%2C%7B%22op%22%3A%22Conditional%20Jump%22%2C%22args%22%3A%5B%221%22%2C%222%22%2C%2210%22%5D%7D%2C%7B%22op%22%3A%22To%20Hex%22%2C%22args%22%3A%5B%22Space%22%5D%7D%2C%7B%22op%22%3A%22Return%22%2C%22args%22%3A%5B%5D%7D%2C%7B%22op%22%3A%22To%20Base64%22%2C%22args%22%3A%5B%22A-Za-z0-9%2B%2F%3D%22%5D%7D%5D&input=U29tZSBkYXRhIHdpdGggYSAxIGluIGl0ClNvbWUgZGF0YSB3aXRoIGEgMiBpbiBpdA
+ [8]: https://gchq.github.io/CyberChef/?recipe=%5B%7B%22op%22%3A%22XOR%22%2C%22args%22%3A%5B%7B%22option%22%3A%22Hex%22%2C%22string%22%3A%223a%22%7D%2Cfalse%2Cfalse%5D%7D%2C%7B%22op%22%3A%22To%20Hexdump%22%2C%22args%22%3A%5B%2216%22%2Cfalse%2Cfalse%5D%7D%5D&input=VGhlIGFuc3dlciB0byB0aGUgdWx0aW1hdGUgcXVlc3Rpb24gb2YgbGlmZSwgdGhlIFVuaXZlcnNlLCBhbmQgZXZlcnl0aGluZyBpcyA0Mi4
\ No newline at end of file
diff --git a/build/prod/.htaccess b/build/prod/.htaccess
new file mode 100755
index 00000000..80626724
--- /dev/null
+++ b/build/prod/.htaccess
@@ -0,0 +1,50 @@
+# Serve up .htm files as binary files rather than text/html.
+# This allows cyberchef.htm to be downloaded rather than opened in the browser.
+AddType application/octet-stream .htm
+
+# Fix Apache bug #45023 where "-gzip" is appended to all ETags, preventing 304 responses
+
+ RequestHeader edit "If-None-Match" "^\"(.*)-gzip\"$" "\"$1\""
+ Header edit "ETag" "^\"(.*[^g][^z][^i][^p])\"$" "\"$1-gzip\""
+
+
+# Set gzip compression on all resources that support it
+
+ SetOutputFilter DEFLATE
+
+
+# Set Expires headers on various resources
+
+ ExpiresActive On
+
+ # 10 minutes
+ ExpiresDefault "access plus 600 seconds"
+
+ # 30 days
+ ExpiresByType image/x-icon "access plus 2592000 seconds"
+ ExpiresByType image/jpeg "access plus 2592000 seconds"
+ ExpiresByType image/png "access plus 2592000 seconds"
+ ExpiresByType image/gif "access plus 2592000 seconds"
+
+ # 7 days
+ ExpiresByType text/css "access plus 604800 seconds"
+ ExpiresByType text/javascript "access plus 604800 seconds"
+ ExpiresByType application/javascript "access plus 604800 seconds"
+ ExpiresByType text/html "access plus 604800 seconds"
+
+
+# Set Cache-Control headers on various resources
+
+
+ Header set Cache-Control "max-age=2592000, public"
+
+
+ Header set Cache-Control "max-age=600, public"
+
+
+ Header set Cache-Control "max-age=600, private, must-revalidate"
+
+
+ Header set Cache-Control "max-age=600, private, must-revalidate"
+
+
diff --git a/build/prod/cyberchef.htm b/build/prod/cyberchef.htm
new file mode 100755
index 00000000..d20d14da
--- /dev/null
+++ b/build/prod/cyberchef.htm
@@ -0,0 +1,364 @@
+
+
Yes! Just drag your file over the input box and drop it. The contents of the file will be converted into hexadecimal and the 'From Hex' operation will be added to the beginning of the recipe (if it's not already there). This is so that special characters like carriage returns aren't removed by your browser.
Please note that loading large files is likely to cause a crash. There's not a lot that can be done about this - browsers just aren't very good at handling and displaying large amounts of data.
Maybe you have 10 timestamps that you want to parse or 16 encoded strings that all have the same key.
The 'Fork' operation (found in the 'Flow control' category) splits up the input line by line and runs all subsequent operations on each line separately. Each output is then displayed on a separate line. These delimiters can be changed, so if your inputs are separated by commas, you can change the split delimiter to a comma instead.
A simple, intuitive web app for analysing and decoding data without having to deal with complex tools or programming languages. CyberChef encourages both technical and non-technical people to explore data formats, encryption and compression.
Why
Digital data comes in all shapes, sizes and formats in the modern world – CyberChef helps to make sense of this data all on one easy-to-use platform.
How
The interface is designed with simplicity at its heart. Complex techniques are now as trivial as drag-and-drop. Simple functions can be combined to build up a "recipe", potentially resulting in complex analysis, which can be shared with other users and used with their input.
For those comfortable writing code, CyberChef is a quick and efficient way to prototype solutions to a problem which can then be scripted once proven to work.
Who
It is expected that CyberChef will be useful for cybersecurity and antivirus companies. It should also appeal to the academic world and any individuals or companies involved in the analysis of digital data, be that software developers, analysts, mathematicians or casual puzzle solvers.
Aim
It is hoped that by releasing CyberChef through GitHub, contributions can be added which can be rolled out into future versions of the tool.
There are around 150 useful operations in CyberChef for anyone working on anything vaguely Internet-related, whether you just want to convert a timestamp to a different format, decompress gzipped data, create a SHA3 hash, or parse an X.509 certificate to find out who issued it.
It’s the Cyber Swiss Army Knife.
\ No newline at end of file
diff --git a/build/prod/images/breakpoint-16x16.png b/build/prod/images/breakpoint-16x16.png
new file mode 100755
index 00000000..336df401
Binary files /dev/null and b/build/prod/images/breakpoint-16x16.png differ
diff --git a/build/prod/images/bug-16x16.png b/build/prod/images/bug-16x16.png
new file mode 100755
index 00000000..8098d345
Binary files /dev/null and b/build/prod/images/bug-16x16.png differ
diff --git a/build/prod/images/clean-16x16.png b/build/prod/images/clean-16x16.png
new file mode 100755
index 00000000..b61e5668
Binary files /dev/null and b/build/prod/images/clean-16x16.png differ
diff --git a/build/prod/images/code-16x16.png b/build/prod/images/code-16x16.png
new file mode 100755
index 00000000..a9b8870e
Binary files /dev/null and b/build/prod/images/code-16x16.png differ
diff --git a/build/prod/images/cook_female-32x32.png b/build/prod/images/cook_female-32x32.png
new file mode 100755
index 00000000..0b00aa35
Binary files /dev/null and b/build/prod/images/cook_female-32x32.png differ
diff --git a/build/prod/images/cook_male-32x32.png b/build/prod/images/cook_male-32x32.png
new file mode 100755
index 00000000..d881c9f8
Binary files /dev/null and b/build/prod/images/cook_male-32x32.png differ
diff --git a/build/prod/images/cyberchef-128x128.png b/build/prod/images/cyberchef-128x128.png
new file mode 100755
index 00000000..2b8c71a0
Binary files /dev/null and b/build/prod/images/cyberchef-128x128.png differ
diff --git a/build/prod/images/cyberchef-16x16.png b/build/prod/images/cyberchef-16x16.png
new file mode 100755
index 00000000..b847c10e
Binary files /dev/null and b/build/prod/images/cyberchef-16x16.png differ
diff --git a/build/prod/images/cyberchef-256x256.png b/build/prod/images/cyberchef-256x256.png
new file mode 100755
index 00000000..61835a10
Binary files /dev/null and b/build/prod/images/cyberchef-256x256.png differ
diff --git a/build/prod/images/cyberchef-32x32.png b/build/prod/images/cyberchef-32x32.png
new file mode 100755
index 00000000..640e4756
Binary files /dev/null and b/build/prod/images/cyberchef-32x32.png differ
diff --git a/build/prod/images/cyberchef-512x512.png b/build/prod/images/cyberchef-512x512.png
new file mode 100755
index 00000000..f48cd49b
Binary files /dev/null and b/build/prod/images/cyberchef-512x512.png differ
diff --git a/build/prod/images/cyberchef-64x64.png b/build/prod/images/cyberchef-64x64.png
new file mode 100755
index 00000000..5e5a4110
Binary files /dev/null and b/build/prod/images/cyberchef-64x64.png differ
diff --git a/build/prod/images/disable_deselected-16x16.png b/build/prod/images/disable_deselected-16x16.png
new file mode 100755
index 00000000..0dcaf2b3
Binary files /dev/null and b/build/prod/images/disable_deselected-16x16.png differ
diff --git a/build/prod/images/disable_selected-16x16.png b/build/prod/images/disable_selected-16x16.png
new file mode 100755
index 00000000..f47a0b95
Binary files /dev/null and b/build/prod/images/disable_selected-16x16.png differ
diff --git a/build/prod/images/download-24x24.png b/build/prod/images/download-24x24.png
new file mode 100755
index 00000000..058e51b0
Binary files /dev/null and b/build/prod/images/download-24x24.png differ
diff --git a/build/prod/images/erase-16x16.png b/build/prod/images/erase-16x16.png
new file mode 100755
index 00000000..bc6a3fa4
Binary files /dev/null and b/build/prod/images/erase-16x16.png differ
diff --git a/build/prod/images/favicon.ico b/build/prod/images/favicon.ico
new file mode 100755
index 00000000..fa2deb03
Binary files /dev/null and b/build/prod/images/favicon.ico differ
diff --git a/build/prod/images/favourite-16x16.png b/build/prod/images/favourite-16x16.png
new file mode 100755
index 00000000..f6b99459
Binary files /dev/null and b/build/prod/images/favourite-16x16.png differ
diff --git a/build/prod/images/favourite-24x24.png b/build/prod/images/favourite-24x24.png
new file mode 100755
index 00000000..eb1b91be
Binary files /dev/null and b/build/prod/images/favourite-24x24.png differ
diff --git a/build/prod/images/help-16x16.png b/build/prod/images/help-16x16.png
new file mode 100755
index 00000000..63a7069f
Binary files /dev/null and b/build/prod/images/help-16x16.png differ
diff --git a/build/prod/images/help-22x22.png b/build/prod/images/help-22x22.png
new file mode 100755
index 00000000..ddea036d
Binary files /dev/null and b/build/prod/images/help-22x22.png differ
diff --git a/build/prod/images/info-16x16.png b/build/prod/images/info-16x16.png
new file mode 100755
index 00000000..05f16291
Binary files /dev/null and b/build/prod/images/info-16x16.png differ
diff --git a/build/prod/images/layout-16x16.png b/build/prod/images/layout-16x16.png
new file mode 100755
index 00000000..3ae4db42
Binary files /dev/null and b/build/prod/images/layout-16x16.png differ
diff --git a/build/prod/images/mail-16x16.png b/build/prod/images/mail-16x16.png
new file mode 100755
index 00000000..6afab8a8
Binary files /dev/null and b/build/prod/images/mail-16x16.png differ
diff --git a/build/prod/images/open_yellow-16x16.png b/build/prod/images/open_yellow-16x16.png
new file mode 100755
index 00000000..c849a9e4
Binary files /dev/null and b/build/prod/images/open_yellow-16x16.png differ
diff --git a/build/prod/images/open_yellow-24x24.png b/build/prod/images/open_yellow-24x24.png
new file mode 100755
index 00000000..7ff52888
Binary files /dev/null and b/build/prod/images/open_yellow-24x24.png differ
diff --git a/build/prod/images/recycle-16x16.png b/build/prod/images/recycle-16x16.png
new file mode 100755
index 00000000..faff7bf6
Binary files /dev/null and b/build/prod/images/recycle-16x16.png differ
diff --git a/build/prod/images/remove-16x16.png b/build/prod/images/remove-16x16.png
new file mode 100755
index 00000000..b0cbfb64
Binary files /dev/null and b/build/prod/images/remove-16x16.png differ
diff --git a/build/prod/images/save-16x16.png b/build/prod/images/save-16x16.png
new file mode 100755
index 00000000..c9df8df6
Binary files /dev/null and b/build/prod/images/save-16x16.png differ
diff --git a/build/prod/images/save-22x22.png b/build/prod/images/save-22x22.png
new file mode 100755
index 00000000..51183947
Binary files /dev/null and b/build/prod/images/save-22x22.png differ
diff --git a/build/prod/images/save_as-16x16.png b/build/prod/images/save_as-16x16.png
new file mode 100755
index 00000000..b5d4db8b
Binary files /dev/null and b/build/prod/images/save_as-16x16.png differ
diff --git a/build/prod/images/settings-22x22.png b/build/prod/images/settings-22x22.png
new file mode 100755
index 00000000..89c7bf6a
Binary files /dev/null and b/build/prod/images/settings-22x22.png differ
diff --git a/build/prod/images/speech-16x16.png b/build/prod/images/speech-16x16.png
new file mode 100755
index 00000000..5519c5d7
Binary files /dev/null and b/build/prod/images/speech-16x16.png differ
diff --git a/build/prod/images/stats-16x16.png b/build/prod/images/stats-16x16.png
new file mode 100755
index 00000000..ebd41ef6
Binary files /dev/null and b/build/prod/images/stats-16x16.png differ
diff --git a/build/prod/images/step-16x16.png b/build/prod/images/step-16x16.png
new file mode 100755
index 00000000..cea525a3
Binary files /dev/null and b/build/prod/images/step-16x16.png differ
diff --git a/build/prod/images/switch-16x16.png b/build/prod/images/switch-16x16.png
new file mode 100755
index 00000000..4af699e7
Binary files /dev/null and b/build/prod/images/switch-16x16.png differ
diff --git a/build/prod/images/thumb_down-16x16.png b/build/prod/images/thumb_down-16x16.png
new file mode 100755
index 00000000..69e6663c
Binary files /dev/null and b/build/prod/images/thumb_down-16x16.png differ
diff --git a/build/prod/images/thumb_up-16x16.png b/build/prod/images/thumb_up-16x16.png
new file mode 100755
index 00000000..0279ee24
Binary files /dev/null and b/build/prod/images/thumb_up-16x16.png differ
diff --git a/build/prod/images/undo-16x16.png b/build/prod/images/undo-16x16.png
new file mode 100755
index 00000000..a9ba0be9
Binary files /dev/null and b/build/prod/images/undo-16x16.png differ
diff --git a/build/prod/index.html b/build/prod/index.html
new file mode 100755
index 00000000..8a02333f
--- /dev/null
+++ b/build/prod/index.html
@@ -0,0 +1,21 @@
+
+CyberChef Edit
Yes! Just drag your file over the input box and drop it. The contents of the file will be converted into hexadecimal and the 'From Hex' operation will be added to the beginning of the recipe (if it's not already there). This is so that special characters like carriage returns aren't removed by your browser.
Please note that loading large files is likely to cause a crash. There's not a lot that can be done about this - browsers just aren't very good at handling and displaying large amounts of data.
Maybe you have 10 timestamps that you want to parse or 16 encoded strings that all have the same key.
The 'Fork' operation (found in the 'Flow control' category) splits up the input line by line and runs all subsequent operations on each line separately. Each output is then displayed on a separate line. These delimiters can be changed, so if your inputs are separated by commas, you can change the split delimiter to a comma instead.
A simple, intuitive web app for analysing and decoding data without having to deal with complex tools or programming languages. CyberChef encourages both technical and non-technical people to explore data formats, encryption and compression.
Why
Digital data comes in all shapes, sizes and formats in the modern world – CyberChef helps to make sense of this data all on one easy-to-use platform.
How
The interface is designed with simplicity at its heart. Complex techniques are now as trivial as drag-and-drop. Simple functions can be combined to build up a "recipe", potentially resulting in complex analysis, which can be shared with other users and used with their input.
For those comfortable writing code, CyberChef is a quick and efficient way to prototype solutions to a problem which can then be scripted once proven to work.
Who
It is expected that CyberChef will be useful for cybersecurity and antivirus companies. It should also appeal to the academic world and any individuals or companies involved in the analysis of digital data, be that software developers, analysts, mathematicians or casual puzzle solvers.
Aim
It is hoped that by releasing CyberChef through GitHub, contributions can be added which can be rolled out into future versions of the tool.
There are around 150 useful operations in CyberChef for anyone working on anything vaguely Internet-related, whether you just want to convert a timestamp to a different format, decompress gzipped data, create a SHA3 hash, or parse an X.509 certificate to find out who issued it.
Yes! Just drag your file over the input box and drop it. The contents of the file will be converted into hexadecimal and the 'From Hex' operation will be added to the beginning of the recipe (if it's not already there). This is so that special characters like carriage returns aren't removed by your browser.
+
Please note that loading large files is likely to cause a crash. There's not a lot that can be done about this - browsers just aren't very good at handling and displaying large amounts of data.
Maybe you have 10 timestamps that you want to parse or 16 encoded strings that all have the same key.
+
The 'Fork' operation (found in the 'Flow control' category) splits up the input line by line and runs all subsequent operations on each line separately. Each output is then displayed on a separate line. These delimiters can be changed, so if your inputs are separated by commas, you can change the split delimiter to a comma instead.
If you're a nerd like me, you might find statistics really fun! Here's some about the CyberChef code base:
+
<%= codebase_stats %>
+
+
+
What
+
A simple, intuitive web app for analysing and decoding data without having to deal with complex tools or programming languages. CyberChef encourages both technical and non-technical people to explore data formats, encryption and compression.
+
+
Why
+
Digital data comes in all shapes, sizes and formats in the modern world – CyberChef helps to make sense of this data all on one easy-to-use platform.
+
+
How
+
The interface is designed with simplicity at its heart. Complex techniques are now as trivial as drag-and-drop. Simple functions can be combined to build up a "recipe", potentially resulting in complex analysis, which can be shared with other users and used with their input.
+
For those comfortable writing code, CyberChef is a quick and efficient way to prototype solutions to a problem which can then be scripted once proven to work.
+
+
Who
+
It is expected that CyberChef will be useful for cybersecurity and antivirus companies. It should also appeal to the academic world and any individuals or companies involved in the analysis of digital data, be that software developers, analysts, mathematicians or casual puzzle solvers.
+
+
Aim
+
It is hoped that by releasing CyberChef through GitHub, contributions can be added which can be rolled out into future versions of the tool.
+
+
+
There are around 150 useful operations in CyberChef for anyone working on anything vaguely Internet-related, whether you just want to convert a timestamp to a different format, decompress gzipped data, create a SHA3 hash, or parse an X.509 certificate to find out who issued it.