import { Injectable } from '@angular/core'; import { AES, enc, pad} from 'crypto-js'; @Injectable({ providedIn: 'root' }) export class EncryptionService { constructor() { } encryptData(request: any): object { const fromKey1: number = Math.floor(Math.random() * 5) + 1; const fromKey2: number = Math.floor(Math.random() * 5) + 1; const key1: string = this.generateRandomKey(16); const key2: string = this.generateRandomKey(16); try { let input: string; if (typeof request === 'string') { input = request; } else { input = JSON.stringify(request); } // Encryption const encrypted: string = AES.encrypt(input, enc.Utf8.parse(key1), { iv: enc.Utf8.parse(key2), padding: pad.Pkcs7 }).toString(); const dataBeforeKey1 = encrypted.substring(0, fromKey1); let encryptedDataSubstring = encrypted.substring(fromKey1); const dataBeforeAfterKey2 = encryptedDataSubstring.substring(encryptedDataSubstring.length - fromKey2); encryptedDataSubstring = encryptedDataSubstring.substring(0, encryptedDataSubstring.length - fromKey2); const encryptedRequestData = `1${fromKey1}${dataBeforeKey1}${key1}${encryptedDataSubstring}${key2}${dataBeforeAfterKey2}${fromKey2}1`; const encryptedDataObject = { data: encryptedRequestData }; return encryptedDataObject; } catch (error) { console.error(error); return {}; } } generateRandomKey(length: number): string { const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let key = ''; for (let i = 0; i < length; i++) { key += characters.charAt(Math.floor(Math.random() * characters.length)); } return key; } }