aes_decrypt
Decrypt AES-encrypted text with customizable key, padding, IV, and mode. Supports base64 or hex input formats for flexible data recovery.
Instructions
decrypt text with aes
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | text to encrypt and decrypt | |
| key | No | decrypt key, default is your-key-0123456 | |
| padding | No | padding mode, default is Pkcs7 | Pkcs7 |
| inputFormat | No | input format, default is base64 | base64 |
| iv | No | iv, default is your-iv-01234567 | |
| mode | No | mode, default is ECB | ECB |
Implementation Reference
- src/service/aes.ts:458-537 (registration)Registration of the 'aes_decrypt' tool via server.tool() with its Zod schema (content, key, padding, inputFormat, iv, mode) and handler async function.
server.tool( "aes_decrypt", "decrypt text with aes", { content: z.string().describe("text to encrypt and decrypt"), key: z .string() .optional() .describe("decrypt key, default is your-key-0123456"), padding: z .enum([ "Pkcs7", "Iso97971", "AnsiX923", "Iso10126", "ZeroPadding", "NoPadding", ]) .optional() .describe("padding mode, default is Pkcs7") .default("Pkcs7"), inputFormat: z .enum(["base64", "hex"]) .optional() .describe("input format, default is base64") .default("base64"), iv: z.string().optional().describe("iv, default is your-iv-01234567"), mode: z .enum(["ECB", "CBC", "CFB", "OFB", "CTR"]) .optional() .describe("mode, default is ECB") .default("ECB"), }, async ({ content, key, padding, inputFormat, iv, mode }) => { let result = ""; if (mode === "ECB") { result = AESUtil.decryptECB(content, key ?? "your-key-0123456"); } else if (mode === "CBC") { result = AESUtil.decryptCBC( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "CFB") { result = AESUtil.decryptCFB( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "OFB") { result = AESUtil.decryptOFB( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "CTR") { result = AESUtil.decryptCTR( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } return { content: [ { type: "text", text: result, }, ], }; } ); - src/service/aes.ts:491-536 (handler)Handler logic for aes_decrypt: dispatches to AESUtil.decryptECB, decryptCBC, decryptCFB, decryptOFB, or decryptCTR based on the 'mode' parameter.
async ({ content, key, padding, inputFormat, iv, mode }) => { let result = ""; if (mode === "ECB") { result = AESUtil.decryptECB(content, key ?? "your-key-0123456"); } else if (mode === "CBC") { result = AESUtil.decryptCBC( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "CFB") { result = AESUtil.decryptCFB( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "OFB") { result = AESUtil.decryptOFB( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } else if (mode === "CTR") { result = AESUtil.decryptCTR( content, key ?? "your-key-0123456", iv ?? "your-iv-01234567", (padding ?? "Pkcs7") as PaddingMode, (inputFormat ?? "base64") as OutputFormat ); } return { content: [ { type: "text", text: result, }, ], }; } - src/service/aes.ts:461-490 (schema)Zod schema definitions for aes_decrypt input parameters: content (string), key (optional string), padding (enum Pkcs7/Iso97971/etc), inputFormat (enum base64/hex), iv (optional string), mode (enum ECB/CBC/CFB/OFB/CTR).
{ content: z.string().describe("text to encrypt and decrypt"), key: z .string() .optional() .describe("decrypt key, default is your-key-0123456"), padding: z .enum([ "Pkcs7", "Iso97971", "AnsiX923", "Iso10126", "ZeroPadding", "NoPadding", ]) .optional() .describe("padding mode, default is Pkcs7") .default("Pkcs7"), inputFormat: z .enum(["base64", "hex"]) .optional() .describe("input format, default is base64") .default("base64"), iv: z.string().optional().describe("iv, default is your-iv-01234567"), mode: z .enum(["ECB", "CBC", "CFB", "OFB", "CTR"]) .optional() .describe("mode, default is ECB") .default("ECB"), }, - src/service/aes.ts:50-76 (helper)AESUtil.decryptECB helper - decrypts ciphertext in ECB mode, supports hex and base64 input formats.
static decryptECB( ciphertext: string, key: string, padding: PaddingMode = "Pkcs7", inputFormat: OutputFormat = "base64" ): string { const keyHex = CryptoJS.enc.Utf8.parse(key); let decrypted; if (inputFormat === "hex") { const ciphertextHex = CryptoJS.enc.Hex.parse(ciphertext); const ciphertextParams = CryptoJS.lib.CipherParams.create({ ciphertext: ciphertextHex, }); decrypted = CryptoJS.AES.decrypt(ciphertextParams, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad[padding], }); } else { decrypted = CryptoJS.AES.decrypt(ciphertext, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad[padding], }); } return decrypted.toString(CryptoJS.enc.Utf8); } - src/service/aes.ts:116-146 (helper)AESUtil.decryptCBC helper - decrypts ciphertext in CBC mode with IV, supports hex and base64 input formats.
static decryptCBC( ciphertext: string, key: string, iv: string, padding: PaddingMode = "Pkcs7", inputFormat: OutputFormat = "base64" ): string { const keyHex = CryptoJS.enc.Utf8.parse(key); const ivHex = CryptoJS.enc.Utf8.parse(iv); let decrypted; if (inputFormat === "hex") { const ciphertextHex = CryptoJS.enc.Hex.parse(ciphertext); const ciphertextParams = CryptoJS.lib.CipherParams.create({ ciphertext: ciphertextHex, }); decrypted = CryptoJS.AES.decrypt(ciphertextParams, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad[padding], }); } else { decrypted = CryptoJS.AES.decrypt(ciphertext, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad[padding], }); } return decrypted.toString(CryptoJS.enc.Utf8); }