用户登录问题修改
This commit is contained in:
		
							parent
							
								
									be94bc276f
								
							
						
					
					
						commit
						d0b5d6c704
					
				| 
						 | 
					@ -14,7 +14,10 @@ const DATA_SETTINGS = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SM 配置
 | 
					// SM 配置
 | 
				
			||||||
const SM_CONFIG = {
 | 
					const SM_CONFIG = {
 | 
				
			||||||
  SALT: '2cc0c5f9f1749f1632efa9f63e902323' // SM3 盐值(16 字节)
 | 
					  SALT: '2cc0c5f9f1749f1632efa9f63e902323', // SM3 盐值(16 字节)
 | 
				
			||||||
 | 
					  SM4_KEY: 'your-sm4-key',     // SM4 对称加密密钥
 | 
				
			||||||
 | 
					  SM2_PUBLIC_KEY: 'your-public-key',   // SM2 公钥
 | 
				
			||||||
 | 
					  SM2_PRIVATE_KEY: 'your-private-key'  // SM2 私钥
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AES 配置
 | 
					// AES 配置
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,10 @@ export default {
 | 
				
			||||||
  requireLowerCase: true, // 是否需要小写字母
 | 
					  requireLowerCase: true, // 是否需要小写字母
 | 
				
			||||||
  requireDigit: true, // 是否需要数字
 | 
					  requireDigit: true, // 是否需要数字
 | 
				
			||||||
  requireSpecialChar: true, // 是否需要特殊字符
 | 
					  requireSpecialChar: true, // 是否需要特殊字符
 | 
				
			||||||
  weakPasswords: ['123456', 'password', 'qwerty'], // 弱密码列表
 | 
					  weakPasswords: [ "111", "888", "123", "234", "345", "456", "567", "678", "789", "1234",
 | 
				
			||||||
 | 
					    "2345", "3456", "4567", "5678", "6789", "abc", "abcd", "abcde", "abcdef", "abcdefg",
 | 
				
			||||||
 | 
					    "qwe", "qwer", "qwert", "qwerty", "asdf", "asdfg", "asdfgh", "password", "passw0rd",
 | 
				
			||||||
 | 
					    "letmein", "welcome", "admin", "user", "test", "pass", "root", "login"], // 弱密码列表
 | 
				
			||||||
  restrictConsecutiveChars: true, // 是否限制连续字符
 | 
					  restrictConsecutiveChars: true, // 是否限制连续字符
 | 
				
			||||||
  maxConsecutiveChars: 3, // 最大连续字符数
 | 
					  maxConsecutiveChars: 3, // 最大连续字符数
 | 
				
			||||||
  excludeUsernameInPassword: true, // 是否不允许密码包含用户名
 | 
					  excludeUsernameInPassword: true, // 是否不允许密码包含用户名
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
// src/utils/encryption.js
 | 
					// src/utils/encryption.js
 | 
				
			||||||
import sm3 from 'sm-crypto/src/sm3'
 | 
					import { sm2, sm3, sm4 } from 'sm-crypto'
 | 
				
			||||||
 | 
					// 配置项,例如盐值、SM2 公私钥、SM4 密钥
 | 
				
			||||||
import { SM_CONFIG } from './configure'
 | 
					import { SM_CONFIG } from './configure'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SM3 哈希
 | 
					// SM3 哈希
 | 
				
			||||||
export function hashSM3(text) {
 | 
					export function hashSM3(text) {
 | 
				
			||||||
  // 对数据进行哈希计算
 | 
					  // 对数据进行哈希计算
 | 
				
			||||||
| 
						 | 
					@ -15,3 +17,27 @@ export function hashWithSM3AndSalt(text) {
 | 
				
			||||||
  // 使用 SM3 进行哈希
 | 
					  // 使用 SM3 进行哈希
 | 
				
			||||||
  return hashSM3(textWithSalt)
 | 
					  return hashSM3(textWithSalt)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SM2 加密
 | 
				
			||||||
 | 
					export function encryptWithSM2(text) {
 | 
				
			||||||
 | 
					  // SM2 公钥加密
 | 
				
			||||||
 | 
					  return sm2.doEncrypt(text, SM_CONFIG.SM2_PUBLIC_KEY)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SM2 解密
 | 
				
			||||||
 | 
					export function decryptWithSM2(encryptedText) {
 | 
				
			||||||
 | 
					  // SM2 私钥解密
 | 
				
			||||||
 | 
					  return sm2.doDecrypt(encryptedText, SM_CONFIG.SM2_PRIVATE_KEY)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SM4 加密
 | 
				
			||||||
 | 
					export function encryptWithSM4(text) {
 | 
				
			||||||
 | 
					  // SM4 对称加密,ECB 模式
 | 
				
			||||||
 | 
					  return sm4.encrypt(text, SM_CONFIG.SM4_KEY)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SM4 解密
 | 
				
			||||||
 | 
					export function decryptWithSM4(encryptedText) {
 | 
				
			||||||
 | 
					  // SM4 对称解密,ECB 模式
 | 
				
			||||||
 | 
					  return sm4.decrypt(encryptedText, SM_CONFIG.SM4_KEY)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,8 @@ export function validateNewPassword(rule, value, callback) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // 3. 检查是否包含弱密码
 | 
					  // 3. 检查是否包含弱密码
 | 
				
			||||||
  for (const weakPwd of passwordConfig.weakPasswords) {
 | 
					  for (const weakPwd of passwordConfig.weakPasswords) {
 | 
				
			||||||
    if (value.includes(weakPwd)) {
 | 
					    // 将密码和弱密码都转换为小写进行比较
 | 
				
			||||||
 | 
					    if (value.toLowerCase().includes(weakPwd.toLowerCase())) {
 | 
				
			||||||
      callback(new Error(`密码包含常见的弱密码片段: ${weakPwd}`))
 | 
					      callback(new Error(`密码包含常见的弱密码片段: ${weakPwd}`))
 | 
				
			||||||
      return
 | 
					      return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -198,14 +199,51 @@ export function validateNewPassword(rule, value, callback) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function containsConsecutiveCharacters(password, maxConsecutive) {
 | 
					function containsConsecutiveCharacters(password, maxConsecutive) {
 | 
				
			||||||
  let count = 1
 | 
					  let count = 1; // 初始化计数器
 | 
				
			||||||
  for (let i = 1; i < password.length; i++) {
 | 
					  let previousChar = ""; // 保存上一个字符
 | 
				
			||||||
    if (password[i] === password[i - 1]) {
 | 
					
 | 
				
			||||||
      count++
 | 
					  for (let i = 0; i < password.length; i++) {
 | 
				
			||||||
      if (count > maxConsecutive) return true
 | 
					    // 检查当前字符与前一个字符是否相同
 | 
				
			||||||
 | 
					    if (password[i] === previousChar) {
 | 
				
			||||||
 | 
					      count++; // 计数器加1
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      count = 1
 | 
					      count = 1; // 如果字符不同,重置计数器
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 检查是否超过最大连续字符数
 | 
				
			||||||
 | 
					    if (count > maxConsecutive) {
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 检查当前字符是否是数字
 | 
				
			||||||
 | 
					    if (/\d/.test(password[i])) {
 | 
				
			||||||
 | 
					      // 检查是否有超过指定数量的连续数字
 | 
				
			||||||
 | 
					      if (i > 0 && password[i] === password[i - 1]) {
 | 
				
			||||||
 | 
					        count++; // 计数器加1
 | 
				
			||||||
 | 
					        if (count > maxConsecutive) {
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        count = 1; // 重置计数器
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  return false
 | 
					
 | 
				
			||||||
 | 
					    // 检查当前字符是否是字母
 | 
				
			||||||
 | 
					    if (/[a-zA-Z]/.test(password[i])) {
 | 
				
			||||||
 | 
					      // 检查是否有超过指定数量的连续字母
 | 
				
			||||||
 | 
					      if (i > 0 && password[i] === password[i - 1]) {
 | 
				
			||||||
 | 
					        count++; // 计数器加1
 | 
				
			||||||
 | 
					        if (count > maxConsecutive) {
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        count = 1; // 重置计数器
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    previousChar = password[i]; // 更新上一个字符
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return false; // 如果没有找到问题,则返回符合要求的提示
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue