export const CUSTOM_ALPHABET = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + ".,;:=|!?()[]{}\"'-_/\\@#$%^&* " const alphabetMap = new Map() for (let i = 0; i < CUSTOM_ALPHABET.length; i++) { alphabetMap.set(CUSTOM_ALPHABET[i], i + 1) } function getPos(char: string): number { const pos = alphabetMap.get(char) if (!pos) throw new Error(`Character "${char}" is missing in the alphabet`) return pos } function getChar(pos: number): string { return CUSTOM_ALPHABET[pos - 1] } export function encryptWithAlphabet(text: string, key: string): string { let result = "" const N = CUSTOM_ALPHABET.length for (let i = 0; i < text.length; i++) { const tPos = getPos(text[i]) const kPos = getPos(key[i % key.length]) let encPos = tPos + kPos if (encPos > N) encPos -= N result += getChar(encPos) } return result } export function decryptWithAlphabet(encrypted: string, key: string): string { let result = "" const N = CUSTOM_ALPHABET.length for (let i = 0; i < encrypted.length; i++) { const ePos = getPos(encrypted[i]) const kPos = getPos(key[i % key.length]) let decPos = ePos - kPos if (decPos <= 0) decPos += N result += getChar(decPos) } return result }