UNPKG

@meg-shit/aes-256-ecb-js

Version:

encrypt and dencrypt by aes-256-ecb for Javascript

74 lines (67 loc) 2.19 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const crypto = require('crypto'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; } const crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto); const index = "@meg-shit/aes-256-ecb-js"; const ModeMap = { 16: "aes-128-ecb", 24: "aes-192-ecb", 32: "aes-256-ecb" }; function validateKey(key) { if (!(key.length in ModeMap)) throw new Error(`Invalid key length: ${key.length}`); else return ModeMap[key.length]; } function createDecipher(key) { const mode = validateKey(key); return crypto__default.createDecipheriv(mode, key, null); } function createCipher(key) { const mode = validateKey(key); return crypto__default.createCipheriv(mode, key, null); } function encrypt(data, key, options) { const _options = { inputEncoding: "utf8", outputEncoding: "base64", autoPadding: true, padding: "00", ...options }; let dataBuffer = Buffer.from(data, _options.inputEncoding); if (!_options.autoPadding) { const len = 16 - data.length % 16; const paddingBuf = Buffer.from(new Array(len).fill(_options.padding)); dataBuffer = Buffer.concat([ Buffer.from(data, _options.inputEncoding), paddingBuf ]); } const cipher = createCipher(key); cipher.setAutoPadding(_options.autoPadding); const segment = cipher.update(dataBuffer); const finals = cipher.final(); return Buffer.concat([segment, finals]).toString(_options.outputEncoding); } function decrypt(data, key, options) { const _options = { inputEncoding: "base64", outputEncoding: "utf8", autoPadding: true, padding: "00", ...options }; const decipher = createDecipher(key); decipher.setAutoPadding(_options.autoPadding); const segment = decipher.update(Buffer.from(data, _options.inputEncoding)); const finals = decipher.final(); return Buffer.concat([segment, finals]).toString(_options.outputEncoding); } exports.createCipher = createCipher; exports.createDecipher = createDecipher; exports.decrypt = decrypt; exports["default"] = index; exports.encrypt = encrypt;