import "server-only" import crypto from "crypto" import { env } from "../../env/server" const algorithm = "DES-ECB" const encryptionKey = env.BOOKING_ENCRYPTION_KEY const bufferKey = Buffer.from(encryptionKey, "utf8") export function encrypt(originalString: string) { try { const cipher = crypto.createCipheriv(algorithm, bufferKey, null) cipher.setAutoPadding(false) const bufferString = Buffer.from(originalString, "utf8") const paddingSize = bufferKey.length - (bufferString.length % bufferKey.length) const paddedStr = Buffer.concat([ bufferString, Buffer.alloc(paddingSize, 0), ]) const buffers: Buffer[] = [] buffers.push(cipher.update(paddedStr)) buffers.push(cipher.final()) const result = Buffer.concat(buffers).toString("base64") return result } catch (e) { console.log(e) return "" } } export function decrypt(encryptedString: string) { try { const decipher = crypto.createDecipheriv(algorithm, bufferKey, null) decipher.setAutoPadding(false) const buffers: Buffer[] = [] buffers.push(decipher.update(encryptedString, "base64")) buffers.push(decipher.final()) const result = Buffer.concat(buffers) .toString("utf8") /* * Hexadecimal byte (null byte) replace. These occur when decrypting because * we're disabling the auto padding for historical/compatibility reasons. */ .replace(/(\x00)*/g, "") return result } catch (e) { console.log(e) return "" } }