Ejemplo n.º 1
0
        /// <summary>
        /// 接受用户明文密码,本次使用的解密算法,完成对指定字符串的解密;
        /// 指定的解密算法必须和字符串使用加密的算法一致
        /// 各个算法对明文密码和初始化偏移量的要求不一样
        /// DES和RC2:明文密码长度和初始化偏移量长度 必须是4个字符;
        /// Rijndael:明文密码长度可以是12,16个字符,初始化偏移量为8个字符;
        /// TripleDes:明文密码长度可以为8个和12个字符,初始化偏移量为4个字符;
        /// </summary>
        /// <param name="plainText">加密明文密码</param>
        /// <param name="algorithm">使用的加密算法</param>
        /// <param name="userInitialVector">加密时使用的起始偏移量</param>
        /// <param name="encryptionText">加密后的字符串</param>
        /// <returns></returns>
        public static string Decrypt(string plainText, EncryptionAlgorithm algorithm, string userInitialVector, string encryptionText)
        {
            string result = string.Empty;

            SetKey(algorithm, plainText);
            SetInitialVector(algorithm, userInitialVector);
            EncryptTransform transform = new EncryptTransform(m_Key, m_initVec);

            byte[] bytesData = Convert.FromBase64String(encryptionText);
            byte[] bytes     = null;
            try
            {
                bytes = transform.Decrypt(algorithm, bytesData);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            if (bytes.Length > 0)
            {
                result = Encoding.Unicode.GetString(bytes);
            }
            m_Key     = transform.Key;
            m_initVec = transform.InitVec;
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 接受用户明文密码,本次加密使用的算法,完成对指定字符串的加密
        /// <example><![CDATA[string result = EncryptionHelper.Encrypt("1234", EncryptionAlgorithm.Rc2, "5678", text);]]></example>
        /// <remarks>各个算法对明文密码和初始化偏移量的要求不一样
        /// DES和RC2:明文密码长度和初始化偏移量长度 必须是4个字符;
        /// Rijndael:明文密码长度可以是12,16个字符,初始化偏移量为8个字符;
        /// TripleDes:明文密码长度可以为8个和12个字符,初始化偏移量为4个字符;
        /// 注意:如果提供的明文密码和偏移量不符合算法的标准,将使用随机密码,使用者在加密后通过提供的Key和InitVector属性获得加密时使用的明文密码和偏移量
        /// </remarks>
        /// </summary>
        /// <param name="plainText">使用的加密明文密码</param>
        /// <param name="algorithm">加密算法枚举对象</param>
        /// <param name="userInitialVector">使用的加密起始偏移量</param>
        /// <param name="encryptionText">需要加密的字符</param>
        /// <returns></returns>
        public static string Encrypt(string plainText, EncryptionAlgorithm algorithm, string userInitialVector, string encryptionText)
        {
            string result = string.Empty;

            if (encryptionText.Length > 0)
            {
                SetKey(algorithm, plainText);
                SetInitialVector(algorithm, userInitialVector);
                EncryptTransform transform = new EncryptTransform(m_Key, m_initVec);
                byte[]           bytes     = Encoding.Unicode.GetBytes(encryptionText);
                byte[]           inArray   = transform.Encrypt(algorithm, bytes);
                if (inArray.Length > 0)
                {
                    result = Convert.ToBase64String(inArray);
                }
                m_Key     = transform.Key;
                m_initVec = transform.InitVec;
            }
            return(result);
        }