mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-24 08:46:19 -04:00
Generates a password of given length and complexity based on optional inputs for the inclusion of symbols and numbers.
This commit is contained in:
parent
d635cca210
commit
54d6c7b506
4 changed files with 132 additions and 0 deletions
|
@ -528,6 +528,7 @@
|
||||||
"Disassemble x86",
|
"Disassemble x86",
|
||||||
"Pseudo-Random Number Generator",
|
"Pseudo-Random Number Generator",
|
||||||
"Generate De Bruijn Sequence",
|
"Generate De Bruijn Sequence",
|
||||||
|
"Generate Password",
|
||||||
"Generate UUID",
|
"Generate UUID",
|
||||||
"Generate TOTP",
|
"Generate TOTP",
|
||||||
"Generate HOTP",
|
"Generate HOTP",
|
||||||
|
|
73
src/core/operations/GeneratePassword.mjs
Normal file
73
src/core/operations/GeneratePassword.mjs
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/**
|
||||||
|
* @author 0xff1ce [github.com/0xff1ce]
|
||||||
|
* @copyright Crown Copyright 2024
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Operation from "../Operation.mjs";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate Password operation
|
||||||
|
*/
|
||||||
|
class GeneratePassword extends Operation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GenPassword constructor
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.name = "Generate Password";
|
||||||
|
this.module = "Default";
|
||||||
|
this.description = "Generate a random password based on specified length, and optional inclusion of symbols and numbers.<br><br>This tool is intended to create random passwords for various use cases; however, it does not guarantee absolute security or protection against advanced attacks.<br><br>Users are advised to combine this tool with best practices in password management, including the use of password managers, and to follow security guidelines to ensure the strength and safety of their passwords.";
|
||||||
|
this.inputType = "string";
|
||||||
|
this.outputType = "string";
|
||||||
|
this.args = [
|
||||||
|
{
|
||||||
|
"name": "Length",
|
||||||
|
"type": "number",
|
||||||
|
"value": "24",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symbols",
|
||||||
|
"type": "boolean",
|
||||||
|
"value": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Numbers",
|
||||||
|
"type": "boolean",
|
||||||
|
"value": false
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
async run(input, args) {
|
||||||
|
const len = args[0];
|
||||||
|
const symbols = args[1];
|
||||||
|
const numbers = args[2];
|
||||||
|
|
||||||
|
const baseAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
const lowerAlphabet = baseAlphabet.toLowerCase();
|
||||||
|
const symbolSet = "!@#$%^&*()-=_+|'\"";
|
||||||
|
const numberSet = "123456789";
|
||||||
|
|
||||||
|
let alphabet = baseAlphabet + lowerAlphabet;
|
||||||
|
alphabet += symbols ? symbolSet : "";
|
||||||
|
alphabet += numbers ? numberSet : "";
|
||||||
|
|
||||||
|
const resultArray = new Array(len);
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
resultArray[i] = alphabet.charAt(Math.floor(Math.random() * alphabet.length));
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultArray.join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GeneratePassword;
|
|
@ -71,6 +71,7 @@ import "./tests/Fork.mjs";
|
||||||
import "./tests/FromDecimal.mjs";
|
import "./tests/FromDecimal.mjs";
|
||||||
import "./tests/GenerateAllHashes.mjs";
|
import "./tests/GenerateAllHashes.mjs";
|
||||||
import "./tests/GenerateDeBruijnSequence.mjs";
|
import "./tests/GenerateDeBruijnSequence.mjs";
|
||||||
|
import "./tests/GeneratePassword.mjs";
|
||||||
import "./tests/GetAllCasings.mjs";
|
import "./tests/GetAllCasings.mjs";
|
||||||
import "./tests/GOST.mjs";
|
import "./tests/GOST.mjs";
|
||||||
import "./tests/Gunzip.mjs";
|
import "./tests/Gunzip.mjs";
|
||||||
|
|
57
tests/operations/tests/GeneratePassword.mjs
Normal file
57
tests/operations/tests/GeneratePassword.mjs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
* GeneratePassword tests.
|
||||||
|
*
|
||||||
|
* @author 0xff1ce [github.com/0xff1ce]
|
||||||
|
* @copyright Crown Copyright 2024
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import TestRegister from "../../lib/TestRegister.mjs";
|
||||||
|
|
||||||
|
|
||||||
|
TestRegister.addTests([
|
||||||
|
{
|
||||||
|
name: "Generate random string of length 10 without symbols or numbers",
|
||||||
|
input: "",
|
||||||
|
expectedMatch: /^[A-Za-z]{10}$/,
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "Generate Password",
|
||||||
|
"args": [10, false, false]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Generate random string of length 15 with symbols but without numbers",
|
||||||
|
input: "",
|
||||||
|
expectedMatch: /^[A-Za-z!@#$%^&*()\-=+_|\\"']{15}$/,
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "Generate Password",
|
||||||
|
"args": [15, true, false]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Generate random string of length 20 with numbers but without symbols",
|
||||||
|
input: "",
|
||||||
|
expectedMatch: /^[A-Za-z0-9]{20}$/,
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "Generate Password",
|
||||||
|
"args": [20, false, true]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Generate random string of length 25 with both symbols and numbers",
|
||||||
|
input: "",
|
||||||
|
expectedMatch: /^[A-Za-z0-9!@#$%^&*()\-=+_|\\"']{25}$/,
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "Generate Password",
|
||||||
|
"args": [25, true, true]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
]);
|
Loading…
Add table
Add a link
Reference in a new issue