/// <summary> /// 使用指定的密钥和向量初始化 /// </summary> /// <param name="key">密钥</param> /// <param name="vi">向量</param> /// <param name="flag">唯一标识,如果传入标识则会将加密器缓存,获取时将使用缓存</param> /// <param name="setting">额外设置</param> public YusStringEncrypt(byte[] key, byte[] vi, string flag = null, YusStringEncryptSetting setting = null) { // 如果没传设置就使用默认设置 if (setting == null) { setting = new YusStringEncryptSetting(); } //加密解密是常用功能,预加载所需资源 Manager = new RijndaelManaged { Mode = setting.Mode, Padding = setting.Padding, KeySize = setting.KeySize, BlockSize = setting.BlockSize, Key = key, //设定密钥 IV = vi //设定向量 }; // 创建加密器 Encryptor = Manager.CreateEncryptor(); // 创建解密器 Decryptor = Manager.CreateDecryptor(); // 未设置Flag就不操作缓存 if (flag.YusNullOrWhiteSpace()) { return; } // 已存在就替换 if (_InstanceCache.ContainsKey(flag)) { _InstanceCache[flag] = this; } // 否则就新增 else { _InstanceCache.Add(flag, this); } }
/// <param name="key">密钥</param> /// <param name="vi">向量</param> /// <param name="flag">唯一标识,如果传入标识则会将加密器缓存,获取时将使用缓存</param> /// <param name="setting">额外设置</param> public static YusStringEncrypt GetInstance(byte[] key, byte[] vi, string flag = null, YusStringEncryptSetting setting = null) { var instance = GetInstance(flag); if (instance != null) { return(instance); } return(new YusStringEncrypt(key, vi, flag, setting)); }