You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
|
1 month ago
|
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;
|
||
|
|
}
|
||
|
|
}
|