94 lines
2.7 KiB
TypeScript
Raw Normal View History

2019-12-15 18:07:25 +09:00
import { Injectable } from '@angular/core';
import CryptoJS from 'crypto-js';
2019-12-15 18:07:25 +09:00
import crypto from 'crypto';
import moment from 'moment';
2019-12-15 18:07:25 +09:00
import { CipherUtil } from '../utils/CipherUtil';
@Injectable({
providedIn: 'root'
})
export class DaesangCipherService {
constructor() {}
encrypt(pvUserKey: string, pvSource: string, isBase64: string): string {
const cipherKeyDTD = CipherUtil.makeCipherKey('AES', pvUserKey);
const cipher = crypto.createCipheriv(
'aes-128-cbc',
cipherKeyDTD.key,
cipherKeyDTD.iv
);
cipher.setAutoPadding(true);
let outputEncoding: 'base64' | 'hex';
if ('Y' === isBase64) {
outputEncoding = 'base64';
} else {
outputEncoding = 'hex';
}
const cipherChunks = [];
cipherChunks.push(cipher.update(pvSource, 'utf8', outputEncoding));
cipherChunks.push(cipher.final(outputEncoding));
return cipherChunks.join('');
}
encryptForWebLink(pvSource: string): string {
return CryptoJS.SHA1(pvSource)
.toString()
.toUpperCase();
}
/**
* Sap of Weblink
* @description
* const enc = this.daesangCipherService.encryptForSapErp('aes256-daesang-key!!',12345678);
* console.log('enc', enc);
* const dec = this.daesangCipherService.decryptForSapErp('aes256-daesang-key!!',enc);
* console.log('dec', dec);
*/
encryptForSapErp(pvUserKey: string, employeeNum: number): string {
// const txt = '20200221090321_asdfghjk'; // 1QgLAiLqJ6Uo6bE4Qk1o3Yd6mfqxXSnmqXX%2FXLL7DoA%3D
// const txt = '20200221101444_asdfghjk'; // Lz1TIdGTQQMui%2BBHMdj8fatYYhXbwJEL%2BJ91C7jUWEs%3D
const str = moment().format('YYYYMMDDHHmmss') + '_' + employeeNum;
const secretKeyToByteArray: Buffer = Buffer.from(pvUserKey, 'utf8').slice(
0,
16
);
const ivParamenter: Buffer = Buffer.from(pvUserKey.slice(0, 16));
const cipher: crypto.Cipher = crypto.createCipheriv(
'aes-128-cbc',
secretKeyToByteArray,
ivParamenter
);
let encryptedValue: string = cipher.update(str, 'utf8', 'base64');
encryptedValue += cipher.final('base64');
return encodeURIComponent(encryptedValue);
}
decryptForSapErp(pvUserKey: string, encryptedValue: string): string {
const secretKeyToByteArray: Buffer = Buffer.from(pvUserKey, 'utf8').slice(
0,
16
);
const ivParamenter: Buffer = Buffer.from(pvUserKey.slice(0, 16));
const cipher: crypto.Decipher = crypto.createDecipheriv(
'aes-128-cbc',
secretKeyToByteArray,
ivParamenter
);
let decryptedValue: string = cipher.update(
decodeURIComponent(encryptedValue),
'base64',
'utf8'
);
decryptedValue += cipher.final('utf8');
return decryptedValue;
}
2019-12-15 18:07:25 +09:00
}