首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#加密出错第2部分

C#加密出错第2部分
EN

Stack Overflow用户
提问于 2009-10-01 17:39:58
回答 5查看 527关注 0票数 1

真的没有好好利用加密这一周。让我解释一下我需要什么。

  1. 我想将字符串值加密到一个文件.
  2. 我想使用C#将文件内容解密回字符串
  3. 我想这样做,而不必担心机器存储或用户存储或任何其他存储,既不注册,等等。
  4. 任何安全密钥都可以在我的应用程序中传送。

安全性不一定要非常强大,而且我的代码被混淆了。

我只想要一个便携的解决方案。我已经尝试过RSA,发现在生产过程中丢失了某个密钥文件,这让我一事无成,我对此一无所知,也无法在开发机器上找到它。

请帮帮忙。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-01 17:51:09

下面是一些我使用了相当多的代码(从web上的源代码中改编),它完全依赖于设置下的web.config/app.config中存储的密码。它使用三重des。

代码语言:javascript
运行
复制
 /// <summary>
        /// Encrypts the string.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <returns>Encrypted string</returns>
        public string EncryptString(string text)
        {
            // Locals
            var passphrase = ConfigurationManager.AppSettings["Your Encrypt Passphrase"];
            byte[] results;
            var utf8 = new UTF8Encoding();

            // Step 1. We hash the passphrase using MD5
            // We use the MD5 hash generator as the result is a 128 bit byte array
            // which is a valid length for the TripleDES encoder we use below
            var hashProvider = new MD5CryptoServiceProvider();
            var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object
            // Step 3. Setup the encoder
            var tdesAlgorithm = new TripleDESCryptoServiceProvider
                                    {
                                        Key = tdesKey,
                                        Mode = CipherMode.ECB,
                                        Padding = PaddingMode.PKCS7
                                    };

            // Step 4. Convert the input string to a byte[]
            var dataToEncrypt = utf8.GetBytes(text);

            // Step 5. Attempt to encrypt the string
            try
            {
                var encryptor = tdesAlgorithm.CreateEncryptor();
                results = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
            }
            finally
            {
                // Clear the TripleDes and Hashprovider services of any sensitive information
                tdesAlgorithm.Clear();
                hashProvider.Clear();
            }

            // Step 6. Return the encrypted string as a base64 encoded string
            return Convert.ToBase64String(results);
        }

        /// <summary>
        /// Decrypts the string.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <returns>Decrypted string</returns>
        public string DecryptString(string text)
        {
            // Locals
            var passphrase = ConfigurationManager.AppSettings["Your Encrypt Passphrase"];
            byte[] results;
            var utf8 = new UTF8Encoding();

            // Step 1. We hash the passphrase using MD5
            // We use the MD5 hash generator as the result is a 128 bit byte array
            // which is a valid length for the TripleDES encoder we use below
            var hashProvider = new MD5CryptoServiceProvider();
            var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object
            // Step 3. Setup the decoder
            var tdesAlgorithm = new TripleDESCryptoServiceProvider
                                    {
                                        Key = tdesKey,
                                        Mode = CipherMode.ECB,
                                        Padding = PaddingMode.PKCS7
                                    };

            // Step 4. Convert the input string to a byte[]
            var dataToDecrypt = Convert.FromBase64String(text);

            // Step 5. Attempt to decrypt the string
            try
            {
                var decryptor = tdesAlgorithm.CreateDecryptor();
                results = decryptor.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length);
            }
            finally
            {
                // Clear the TripleDes and Hashprovider services of any sensitive information
                tdesAlgorithm.Clear();
                hashProvider.Clear();
            }

            // Step 6. Return the decrypted string in UTF8 format
            return utf8.GetString(results);
        }

最初的来源在这里:http://www.dijksterhuis.org/encrypting-decrypting-string/

票数 3
EN

Stack Overflow用户

发布于 2009-10-01 17:54:57

您不能在应用程序中存储机密。句号。如果这个奖品值钱的话,有人会找到你的秘密钥匙。在这个时代,一次就够了。谷歌会给出任何有兴趣找到钥匙的人的答案。一旦钥匙被公之于众,它就会把数据传播给每个人,在任何地方。

你的秘密(钥匙)必须来自外部。用户提供密码、提供的证书和密钥、密钥交换协议)。

如果您坚持将密钥存储在应用程序中,从而提供了数据混淆的最小级别(不受保护),那么使用CryptoStream和对称密钥算法,就像http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx上基于Rijndael的硬编码密钥示例。但你必须澄清,这不是什么,只是混淆。

票数 2
EN

Stack Overflow用户

发布于 2009-10-01 17:49:29

你查过弹跳城堡API了吗

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1505382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档