/// <summary> /// 生成加密密码凭证并缓存 /// </summary> /// <param name="passWord">密码</param> private void GetPassWordSecurity(string passWord) { string securityStr = CurPassWordBookModel.Account + passWord; //1、SHA512 securityStr = IEncryptAndDecodeServer.GetSha512(securityStr); //2、数组逆转 var oldArray = securityStr.ToArray(); Char[] newArray = new Char[oldArray.Length]; for (int i = 0; i < oldArray.Length; i++) { newArray[oldArray.Length - 1] = oldArray[i]; } //3、获取MD5 securityStr = IEncryptAndDecodeServer.GetMd532(new string(newArray)); CachePassWordSecurity.GetInstance().Security = securityStr; }
/// <summary> /// 获取缓存实例对象 /// </summary> /// <returns></returns> public static CachePassWordSecurity GetInstance() { if (_cachePassWordSecurity == null) { lock (SyncRoot) { if (_cachePassWordSecurity == null) { _cachePassWordSecurity = new CachePassWordSecurity(); //初始化计时器 _cachePassWordSecurity._timer = new Timer(_cachePassWordSecurity.Timespan); _cachePassWordSecurity._timer.AutoReset = false; _cachePassWordSecurity._timer.Elapsed += _cachePassWordSecurity.Timer_Elapsed; } } } return(_cachePassWordSecurity); }
/// <summary> /// 保存单个密码本 /// </summary> /// <param name="passwordbook">数据</param> /// <param name="type">密保类型</param> /// <param name="secondpwd">二次密码</param> /// <returns>物理认证加密后的密保文件</returns> public string SavePassWordBook(Model.PassWordBookModel passwordbook, PassWordBookSaveType type, string secondpwd) { if (!CachePassWordSecurity.GetInstance().IsCache) { throw new ExceptionSecurityTimeout("密码验证超时需要再次做密码验证"); } if (type == PassWordBookSaveType.AuthPassWord && string.IsNullOrEmpty(secondpwd)) { throw new Exception("使用二次密码认证,二次密码不能为空"); } string savePhysicsStr = string.Empty; //设置时间标记 passwordbook.CreateDate = DateTime.Now; Newtonsoft.Json.Linq.JToken jtoken = new JObject(); jtoken["SecondAuthentication"] = type.ToString(); jtoken["PassWord"] = passwordbook.PassWord; //移除密码显示存储。 passwordbook.PassWord = string.Empty; jtoken["Data"] = Newtonsoft.Json.JsonConvert.SerializeObject(passwordbook.Data); string saveStr = jtoken.ToString(); //针对不同类型进行不同的加密处置方式 switch (type) { case PassWordBookSaveType.Null: break; case PassWordBookSaveType.AuthEmailCode: break; case PassWordBookSaveType.AuthPhoneCode: break; case PassWordBookSaveType.AuthPassWord: saveStr = SecondPwdEncryptionData(secondpwd, saveStr, type); break; case PassWordBookSaveType.PhysicsCode: secondpwd = GetRandomPassWord(12); saveStr = SecondPwdEncryptionData(secondpwd, saveStr, type); //创建物理的密钥文件 savePhysicsStr = IEncryptAndDecodeServer.AesEncryption(secondpwd, CachePassWordSecurity.GetInstance().Security); break; default: break; } //使用密码证书做AES加密 saveStr = IEncryptAndDecodeServer.AesEncryption(saveStr, CachePassWordSecurity.GetInstance().Security); //保存密码本文件 IFileServer.SaveFile(saveStr, CurPassWordBookModel.PassWordCertificate, passwordbook.FilePath); CurPassWordBookModel.PassWordBooks.Add(passwordbook); SaveAccount(); return(savePhysicsStr); }