From 463c7f43eb7e530967683cdcacffcef786a4e817 Mon Sep 17 00:00:00 2001
From: jack <jack.su@pollex.com.tw>
Date: 星期四, 31 八月 2023 08:57:55 +0800
Subject: [PATCH] [UPDATE] 解決弱點Insecure block cipher mode, AES CBC安全性上不足所以需要改為GCM模式來做加密

---
 PAMapp/shared/services/login.service.ts |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/PAMapp/shared/services/login.service.ts b/PAMapp/shared/services/login.service.ts
index 4b06bed..3c8f45a 100644
--- a/PAMapp/shared/services/login.service.ts
+++ b/PAMapp/shared/services/login.service.ts
@@ -2,6 +2,8 @@
 import { AxiosResponse } from 'axios';
 import _ from "lodash";
 import CryptoJS from "crypto-js";
+import forge from "node-forge";
+// import CryptoJS from "asmcrypto-js";
 
 import { ConsultantLoginInfo } from "../models/ConsultantLoginInfo";
 import { LoginRequest } from "../models/loginRequest.model";
@@ -86,19 +88,19 @@
   /** 憿批�� **/
   logInToConsultant(consultantDto:ConsultantLoginInfo, verificationCode: string):Promise<AxiosResponse<LoginSuccessToken>>{
 
-      const key = "PAMKEY1234567890";
-      const iv = "0123456789abcdef";
+  const iv = "0123456789abcdef";
+  const key = "PAMKEY1234567890";
+  const cipher = forge.cipher.createCipher('AES-GCM', key);
+  cipher.start({
+    iv:iv
+  });
+  cipher.update(forge.util.createBuffer(forge.util.encodeUtf8(consultantDto.password)));
+  cipher.finish();
+  const encry = cipher.output;
+  var tag = cipher.mode.tag;
+  const encryptedPassword = window.btoa(encry.data+tag.data);
 
-      const keyBytes = CryptoJS.enc.Utf8.parse(key);
-      const ivBytes = CryptoJS.enc.Utf8.parse(iv);
-
-      const encrypted = CryptoJS.AES.encrypt(consultantDto.password, keyBytes, {
-        iv: ivBytes,
-        mode: CryptoJS.mode.CBC,
-        padding: CryptoJS.pad.Pkcs7,
-      });
-
-    return http.post(`/eService/authenticate/${verificationCode}`, { ...consultantDto, password: encrypted.toString() });
+    return http.post(`/eService/authenticate/${verificationCode}`, { ...consultantDto, password: encryptedPassword});
   }
 
   async logout(): Promise<void> {

--
Gitblit v1.8.0