如何添加和检索TDES IV(初始化向量)的字符串加密(How to add and retriev

2019-10-16 23:54发布

我工作过的.Net一个MVC应用程序,以确保我的敏感信息,在web.config中我已经得到了加密和解密使用三重DES信息两个功能信息等,但是,我是新来的这一点,并成功到达到这里的朋友的帮助下,问几个问题在这里。

在那里我目前坚持的一点是如何添加TDES IV (Initialization Vector)的加密字符串的结束,怎么也同时再次解密检索它? 我的意思是你会如何在一个加密的信息识别,从这里的IV (Initialization Vector)星星?

请帮助。

public static string Encrypt(string Message)
    {
        byte[] iv;
        byte[] Results;
        System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
        MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
        byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
        TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
        TDESAlgorithm.Key = TDESKey;
        TDESAlgorithm.Mode = CipherMode.ECB;
        TDESAlgorithm.Padding = PaddingMode.PKCS7;
        // Capture the randomly generated IV
        iv = TDESAlgorithm.IV;
        byte[] DataToEncrypt = UTF8.GetBytes(Message);
        try
        {
            ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
            Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
            //var lnght=Results.GetLength(0);
            //System.Buffer.BlockCopy(iv, 0, Results, lnght + 1, iv.Length()); //HOW?
        }
        finally
        {
            TDESAlgorithm.Clear();
            HashProvider.Clear();
        }
        return Convert.ToBase64String(Results);
        //return Encoding.UTF8.GetString(Results);
    }

    public static string Decrypt(string Message)
    {
        byte[] Results;
        System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
        MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
        byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
        TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
        TDESAlgorithm.Key = TDESKey;
        // Apply the same IV used during encryption
        //TDESAlgorithm.IV = iv;  // HOW?
        TDESAlgorithm.Mode = CipherMode.ECB;
        TDESAlgorithm.Padding = PaddingMode.PKCS7;
        try
        {
            byte[] DataToDecrypt = Convert.FromBase64String(Message);
            //byte[] DataToDecrypt = UTF8.GetBytes(Message);
            //byte[] DataToDecrypt = Encoding.UTF8.GetBytes(Message);
            ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
            Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); // << ERROR is here.
        }
        finally
        {
            TDESAlgorithm.Clear();
            HashProvider.Clear();
        }
        return UTF8.GetString(Results);
    }

…
…
…

Answer 1:

你的问题是,你使用ECB模式。 欧洲央行不支持的IV,并拥有多项不良性质的。 你可以切换到CBC代替。

通常,你把IV前后未加密的数据。 GameScripting的回答显示了这样做的一种方式。

最后你的密钥派生看起来可疑,但因为它是不完整的,我不能告诉你,你应该在那里做什么。



文章来源: How to add and retrieve TDES IV (Initialization Vector) in encrypted string