From 2aca62a162fa6682644bdcf9d22eddc65e5b2e76 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 30 Oct 2023 09:04:45 +0900 Subject: [PATCH] [feat] ciperchat b64 --- src/ts/process/cipherChat.ts | 115 +++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 47 deletions(-) diff --git a/src/ts/process/cipherChat.ts b/src/ts/process/cipherChat.ts index 0011828b..ad37eaf9 100644 --- a/src/ts/process/cipherChat.ts +++ b/src/ts/process/cipherChat.ts @@ -2,34 +2,20 @@ import type { OpenAIChat } from "."; let lastShift = 0 + +const cipher:'caesar'|'base64' = 'caesar' + export function cipherChat(chat: OpenAIChat[]): OpenAIChat[] { - - //Caesar Chiper - const caesarCipher = (text: string, shift: number) => { - return text - .split('') - .map(char => { - const code = char.charCodeAt(0) - if ((code >= 65) && (code <= 90)) { - return String.fromCharCode(((code - 65 + shift) % 26) + 65) - } else if ((code >= 97) && (code <= 122)) { - return String.fromCharCode(((code - 97 + shift) % 26) + 97) - } else { - return char - } - }) - .join('') - } const shift = Math.floor(Math.random() * 26) + 1 lastShift = shift for(let i = 0; i < chat.length; i++){ - chat[i].content = caesarCipher(chat[i].content, shift) + chat[i].content = ciphers[cipher].encode(chat[i].content, shift) } chat.unshift({ - content: ` 'You are an expert on The Caesar Cipher. We will communicate in Caesar Cipher. Do not be a translator. We are using shift ${shift}`, + content: ciphers[cipher].prompt.replace("${shift}", shift.toString()), role: 'system' }) return chat @@ -38,33 +24,68 @@ export function cipherChat(chat: OpenAIChat[]): OpenAIChat[] { export function decipherChat(chat: string): string { - - //Caesar Chiper - const caesarCipher = (text: string, shift: number) => { - return text - .split('') - .map(char => { - const code = char.charCodeAt(0) - if ((code >= 65) && (code <= 90)) { - const shifted = (code - 65 - shift) - if(shifted < 0){ - return String.fromCharCode(((code - 65 - shift + 26) % 26) + 65) - } - return String.fromCharCode(((code - 65 - shift) % 26) + 65) - } else if ((code >= 97) && (code <= 122)) { - const shifted = (code - 97 - shift) - if(shifted < 0){ - return String.fromCharCode(((code - 97 - shift + 26) % 26) + 97) - } - return String.fromCharCode(((code - 97 - shift) % 26) + 97) - } else { - return char - } - }) - .join('') - } - - return caesarCipher(chat, lastShift) - + return ciphers[cipher].decode(chat, lastShift) +} +//Caesar Chiper +const caesarCipher = (text: string, shift: number) => { + return text + .split('') + .map(char => { + const code = char.charCodeAt(0) + if ((code >= 65) && (code <= 90)) { + return String.fromCharCode(((code - 65 + shift) % 26) + 65) + } else if ((code >= 97) && (code <= 122)) { + return String.fromCharCode(((code - 97 + shift) % 26) + 97) + } else { + return char + } + }) + .join('') +} + +const caesarDecipher = (text: string, shift: number) => { + return text + .split('') + .map(char => { + const code = char.charCodeAt(0) + if ((code >= 65) && (code <= 90)) { + const shifted = (code - 65 - shift) + if(shifted < 0){ + return String.fromCharCode(((code - 65 - shift + 26) % 26) + 65) + } + return String.fromCharCode(((code - 65 - shift) % 26) + 65) + } else if ((code >= 97) && (code <= 122)) { + const shifted = (code - 97 - shift) + if(shifted < 0){ + return String.fromCharCode(((code - 97 - shift + 26) % 26) + 97) + } + return String.fromCharCode(((code - 97 - shift) % 26) + 97) + } else { + return char + } + }) + .join('') +} + +const base64Encode = (text: string) => { + return Buffer.from(text).toString('base64') +} + +const base64Decode = (text: string) => { + return Buffer.from(text, 'base64').toString('ascii') +} + + +const ciphers = { + caesar: { + encode: caesarCipher, + decode: caesarDecipher, + prompt: "You are an expert on The Caesar Cipher. We will communicate in Caesar Cipher. Do not be a translator. We are using shift ${shift}" + }, + base64: { + encode: base64Encode, + decode: base64Decode, + prompt: "You are an expert on The Base64 Cipher. We will communicate in Base64. Do not be a translator." + } } \ No newline at end of file