Merge branch 'master' into feature/jwtdecode_show_hide_dates

This commit is contained in:
Daniel Weber 2025-08-29 11:56:00 +02:00 committed by GitHub
commit efd31868db
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 56 additions and 16 deletions

View file

@ -20,21 +20,36 @@ Cryptographic operations in CyberChef should not be relied upon to provide secur
[A live demo can be found here][1] - have fun!
## Containers
## Running Locally with Docker
If you would like to try out CyberChef locally you can either build it yourself:
**Prerequisites**
- [Docker](hhttps://www.docker.com/products/docker-desktop/)
- Docker Desktop must be open and running on your machine
#### Option 1: Build the Docker Image Yourself
1. Build the docker image
```bash
docker build --tag cyberchef --ulimit nofile=10000 .
```
2. Run the docker container
```bash
docker run -it -p 8080:80 cyberchef
```
3. Navigate to `http://localhost:8080` in your browser
Or you can use our image directly:
#### Option 2: Use the pre-built Docker Image
If you prefer to skip the build process, you can use the pre-built image
```bash
docker run -it -p 8080:80 ghcr.io/gchq/cyberchef:latest
```
Just like before, navigate to `http://localhost:8080` in your browser.
This image is built and published through our [GitHub Workflows](.github/workflows/releases.yml)
## How it works

View file

@ -1,6 +1,7 @@
/**
* @author j433866 [j433866@gmail.com]
* @copyright Crown Copyright 2019
* @author 0xff1ce [github.com/0xff1ce]
* @copyright Crown Copyright 2024
* @license Apache-2.0
*/
@ -22,7 +23,7 @@ class ShowOnMap extends Operation {
this.name = "Show on map";
this.module = "Hashing";
this.description = "Displays co-ordinates on a slippy map.<br><br>Co-ordinates will be converted to decimal degrees before being shown on the map.<br><br>Supported formats:<ul><li>Degrees Minutes Seconds (DMS)</li><li>Degrees Decimal Minutes (DDM)</li><li>Decimal Degrees (DD)</li><li>Geohash</li><li>Military Grid Reference System (MGRS)</li><li>Ordnance Survey National Grid (OSNG)</li><li>Universal Transverse Mercator (UTM)</li></ul><br>This operation will not work offline.";
this.infoURL = "https://foundation.wikimedia.org/wiki/Maps_Terms_of_Use";
this.infoURL = "https://osmfoundation.org/wiki/Terms_of_Use";
this.inputType = "string";
this.outputType = "string";
this.presentType = "html";
@ -85,10 +86,10 @@ class ShowOnMap extends Operation {
data = "0, 0";
}
const zoomLevel = args[0];
const tileUrl = "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",
tileAttribution = "<a href=\"https://wikimediafoundation.org/wiki/Maps_Terms_of_Use\">Wikimedia maps</a> | &copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors",
leafletUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.js",
leafletCssUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.css";
const tileUrl = "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
tileAttribution = "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors",
leafletUrl = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.js",
leafletCssUrl = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css";
return `<link rel="stylesheet" href="${leafletCssUrl}" crossorigin=""/>
<style>
#output-text .cm-content,

View file

@ -45,11 +45,12 @@ class ToDecimal extends Operation {
* @returns {string}
*/
run(input, args) {
input = new Uint8Array(input);
const delim = Utils.charRep(args[0]),
signed = args[1];
if (signed) {
input = input.map(v => v > 0x7F ? v - 0xFF - 1 : v);
input = new Int8Array(input);
} else {
input = new Uint8Array(input);
}
return input.join(delim);
}

View file

@ -24,7 +24,7 @@ class VarIntDecode extends Operation {
this.description = "Decodes a VarInt encoded integer. VarInt is an efficient way of encoding variable length integers and is commonly used with Protobuf.";
this.infoURL = "https://developers.google.com/protocol-buffers/docs/encoding#varints";
this.inputType = "byteArray";
this.outputType = "number";
this.outputType = "string";
this.args = [];
}
@ -35,7 +35,18 @@ class VarIntDecode extends Operation {
*/
run(input, args) {
try {
return Protobuf.varIntDecode(input);
if (typeof BigInt === "function") {
let result = BigInt(0);
let offset = BigInt(0);
for (let i = 0; i < input.length; i++) {
result |= BigInt(input[i] & 0x7f) << offset;
if (!(input[i] & 0x80)) break;
offset += BigInt(7);
}
return result.toString();
} else {
return Protobuf.varIntDecode(input).toString();
}
} catch (err) {
throw new OperationError(err);
}

View file

@ -23,19 +23,31 @@ class VarIntEncode extends Operation {
this.module = "Default";
this.description = "Encodes a Vn integer as a VarInt. VarInt is an efficient way of encoding variable length integers and is commonly used with Protobuf.";
this.infoURL = "https://developers.google.com/protocol-buffers/docs/encoding#varints";
this.inputType = "number";
this.inputType = "string";
this.outputType = "byteArray";
this.args = [];
}
/**
* @param {number} input
* @param {string} input
* @param {Object[]} args
* @returns {byteArray}
*/
run(input, args) {
try {
return Protobuf.varIntEncode(input);
if (typeof BigInt === "function") {
let value = BigInt(input);
if (value < 0) throw new OperationError("Negative values cannot be represented as VarInt");
const result = [];
while (value >= 0x80) {
result.push(Number(value & BigInt(0x7f)) | 0x80);
value >>= BigInt(7);
}
result.push(Number(value));
return result;
} else {
return Protobuf.varIntEncode(Number(input));
}
} catch (err) {
throw new OperationError(err);
}