katya / src /utils /encryption /caesar-cipher.ts
esubtelnik's picture
Add download endpoints for visitors, employees, and books; update Swagger documentation
2200342
export const CUSTOM_ALPHABET =
"abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"0123456789" +
".,;:=|!?()[]{}\"'-_/\\@#$%^&* "
const alphabetMap = new Map<string, number>()
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
}