mirror of
https://github.com/gchq/CyberChef.git
synced 2025-05-10 00:05:11 -04:00
[#913] added groupings to hex dump
This commit is contained in:
parent
11c2bae53d
commit
150e66fc99
1 changed files with 15 additions and 2 deletions
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Operation from "../Operation.mjs";
|
import Operation from "../Operation.mjs";
|
||||||
|
import OperationError from "../errors/OperationError.mjs";
|
||||||
import Utils from "../Utils.mjs";
|
import Utils from "../Utils.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,6 +40,11 @@ class ToHexdump extends Operation {
|
||||||
"name": "Include final length",
|
"name": "Include final length",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"value": false
|
"value": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Output grouping",
|
||||||
|
"type": "number",
|
||||||
|
"value": 1
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -52,13 +58,20 @@ class ToHexdump extends Operation {
|
||||||
const data = new Uint8Array(input);
|
const data = new Uint8Array(input);
|
||||||
const [length, upperCase, includeFinalLength] = args;
|
const [length, upperCase, includeFinalLength] = args;
|
||||||
const padding = 2;
|
const padding = 2;
|
||||||
|
const groupSize = args[3] || 1;
|
||||||
|
if (length%groupSize !== 0){
|
||||||
|
throw new OperationError("The value of the width parameter must be divisible by the value of the output grouping parameter");
|
||||||
|
}
|
||||||
|
|
||||||
let output = "";
|
let output = "";
|
||||||
for (let i = 0; i < data.length; i += length) {
|
for (let i = 0; i < data.length; i += length) {
|
||||||
const buff = data.slice(i, i+length);
|
const buff = data.slice(i, i+length);
|
||||||
let hexa = "";
|
let hexa = "";
|
||||||
for (let j = 0; j < buff.length; j++) {
|
for (let j = 0; j < buff.length; j++) {
|
||||||
hexa += Utils.hex(buff[j], padding) + " ";
|
hexa += Utils.hex(buff[j], padding);
|
||||||
|
if (groupSize === 1 || (j > 0 && (j+1)%groupSize === 0)){
|
||||||
|
hexa += " ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let lineNo = Utils.hex(i, 8);
|
let lineNo = Utils.hex(i, 8);
|
||||||
|
@ -69,7 +82,7 @@ class ToHexdump extends Operation {
|
||||||
}
|
}
|
||||||
|
|
||||||
output += lineNo + " " +
|
output += lineNo + " " +
|
||||||
hexa.padEnd(length*(padding+1), " ") +
|
hexa.padEnd(length*padding+(length/groupSize), " ") +
|
||||||
" |" + Utils.printable(Utils.byteArrayToChars(buff)).padEnd(buff.length, " ") + "|\n";
|
" |" + Utils.printable(Utils.byteArrayToChars(buff)).padEnd(buff.length, " ") + "|\n";
|
||||||
|
|
||||||
if (includeFinalLength && i+buff.length === data.length) {
|
if (includeFinalLength && i+buff.length === data.length) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue