UNPKG

crypto-keygen-suite

Version:

Key generation utilities for cryptographic operations. YES I RENAMED IT. SIX STATE PROTOCOL!!! See its folder for all <3

88 lines (72 loc) 2.67 kB
import yargs from 'yargs/yargs'; import { hideBin } from 'yargs/helpers'; function columnarTranspositionEncrypt(message, key) { const numColumns = key.length; const numRows = Math.ceil(message.length / numColumns); const grid = Array.from({ length: numRows }, () => Array(numColumns).fill('')); for (let i = 0; i < message.length; i++) { const row = Math.floor(i / numColumns); const col = i % numColumns; grid[row][col] = message[i]; } const keyOrder = Array.from(key).map((char, index) => ({ char, index })) .sort((a, b) => a.char.localeCompare(b.char)) .map(item => item.index); let result = ''; for (const col of keyOrder) { for (let row = 0; row < numRows; row++) { if (grid[row][col]) { result += grid[row][col]; } } } return result; } function columnarTranspositionDecrypt(message, key) { const numColumns = key.length; const numRows = Math.ceil(message.length / numColumns); const grid = Array.from({ length: numRows }, () => Array(numColumns).fill('')); const keyOrder = Array.from(key).map((char, index) => ({ char, index })) .sort((a, b) => a.char.localeCompare(b.char)) .map(item => item.index); let index = 0; for (const col of keyOrder) { for (let row = 0; row < numRows; row++) { if (index < message.length) { grid[row][col] = message[index++]; } } } let result = ''; for (let row = 0; row < numRows; row++) { for (let col = 0; col < numColumns; col++) { result += grid[row][col]; } } return result; } const argv = yargs(hideBin(process.argv)) .option('message', { alias: 'm', description: 'The message to encrypt or decrypt', type: 'string', demandOption: true }) .option('key', { alias: 'k', description: 'The key used for encryption or decryption', type: 'string', demandOption: true }) .option('encrypt', { alias: 'e', description: 'Set to true to encrypt, false to decrypt', type: 'boolean', default: true }) .help() .argv; const result = argv.encrypt ? columnarTranspositionEncrypt(argv.message, argv.key) : columnarTranspositionDecrypt(argv.message, argv.key); console.log('Result:', result);