C# 加密-远程SQL Server+;桌面应用程序

C# 加密-远程SQL Server+;桌面应用程序,c#,C#,我正在开发一个桌面应用程序。它应该可以在互联网上工作并与远程数据库通信。应用程序的数据必须通过传输进行加密 最简单的方法是创建静态键,并在从DB读写数据时使用它。但如果我这样做,我将无法更改该键。我想有一些解决办法可以解决这个问题 你能告诉我,当开发者在他们的应用程序中需要动态加密时,他们是如何操作的吗 多谢各位 它应该可以在互联网上工作并与远程数据库通信 这是SSL/发生的事情之一。服务器和客户端设置了窃听者无法拦截的安全通道。我建议阅读这本书来了解这个协议以及其他类似的协议是如何工作的。是您

我正在开发一个桌面应用程序。它应该可以在互联网上工作并与远程数据库通信。应用程序的数据必须通过传输进行加密

最简单的方法是创建静态键,并在从DB读写数据时使用它。但如果我这样做,我将无法更改该键。我想有一些解决办法可以解决这个问题

你能告诉我,当开发者在他们的应用程序中需要动态加密时,他们是如何操作的吗

多谢各位

它应该可以在互联网上工作并与远程数据库通信

这是SSL/发生的事情之一。服务器和客户端设置了窃听者无法拦截的安全通道。我建议阅读这本书来了解这个协议以及其他类似的协议是如何工作的。是您可能希望学习的相当熟悉的应用程序

开发人员在应用程序中需要动态加密时如何操作


一般来说,以前的雇主都使用自己生成的证书。根据业务需要,软件的每个版本获得不同的证书,或者每个用户获得不同的证书(这最终成为每个用户获得的许可证密钥的一部分)。如果其中一个证书被泄露,则该证书可以被吊销

如果只需要为传输而加密数据,则应使用加密(即SSL/TLS)连接。MS SQL Server支持以下功能:


复制此代码,并根据需要对其进行测试。。WPF控制台应用程序等

using System;
using System.Security.Cryptography;
using System.Text;

public static class DataEncryption
{
   public static string Encrypt(string input, string key)
   {
      byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
      TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
      tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
      tripleDES.Mode = CipherMode.ECB;
      tripleDES.Padding = PaddingMode.PKCS7;
      ICryptoTransform cTransform = tripleDES.CreateEncryptor();
      byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
      tripleDES.Clear();
      return Convert.ToBase64String(resultArray, 0, resultArray.Length);
   }

   public static string Decrypt(string input, string key)
   {
      byte[] inputArray = Convert.FromBase64String(input);
      TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
      tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
      tripleDES.Mode = CipherMode.ECB;
      tripleDES.Padding = PaddingMode.PKCS7;
      ICryptoTransform cTransform = tripleDES.CreateDecryptor();
      byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
      tripleDES.Clear();
      return UTF8Encoding.UTF8.GetString(resultArray);
   }
}
这会让你了解我在说什么。

请尝试一下这段代码,它也非常有效。。基本上,您想要加密的字符串只需将该字符串传递给您可能需要修改代码才能为您的项目工作的方法即可

using System;
using System.Text;
using System.Security.Cryptography;

namespace EncryptStringSample
{
    class MainClass
    {

        public static string EncryptString(string Message, string Passphrase)
        {
            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.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

            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object
            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();

            // Step 3. Setup the encoder
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            // Step 4. Convert the input string to a byte[]
            byte[] DataToEncrypt = UTF8.GetBytes(Message);

            // Step 5. Attempt to encrypt the string
            try
            {
                ICryptoTransform 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);
        }

        public static string DecryptString(string Message, string Passphrase)
        {
            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.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

            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object
            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();

            // Step 3. Setup the decoder
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            // Step 4. Convert the input string to a byte[]
            byte[] DataToDecrypt = Convert.FromBase64String(Message);

            // Step 5. Attempt to decrypt the string
            try
            {
                ICryptoTransform 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 );
        }

        public static void Main(string[] args)
        {
            // The message to encrypt.
            string Msg = "This world is round, not flat, don't believe them!";
            string Password = "secret";

            string EncryptedString = EncryptString(Msg, Password);
            string DecryptedString = DecryptString(EncryptedString, Password);

            Console.WriteLine("Message: {0}",Msg);
            Console.WriteLine("Password: {0}",Password);
            Console.WriteLine("Encrypted string: {0}",EncryptedString);
            Console.WriteLine("Decrypted string: {0}",DecryptedString);
        }
    }
}

你想要一粒种子吗。。?用C#.NET在谷歌上搜索简单加密SHA1。通过Internet进行加密的例子和方法很多。我知道我可以简单地使用加密功能。但它只会使用一个秘密。将来也不会改变。我希望应用程序是灵活的。我用SHA1加密密码,而不是数据你也可以用它来加密数据,但我仍然会用谷歌加密数据和所有不同的方式。您可以序列化数据,然后加密。。你具体想做什么?发一小段你想加密的示例。加密的数据将是简单的文本消息。该应用程序将用于与远程员工通信,并为他们设置任务。我可以使用对称加密,但我避免将来无法更改密钥,或担心应用程序中的密钥不安全。只有管理员应用程序、客户端应用程序和远程MSSQL任务是否包含敏感信息。。。??如果没有,那么您需要加密的原因是什么?这是基于winforms的应用程序还是基于web的。。?曾经考虑过一个Web服务,它会把消息发送到像任务队列之类的东西……“取决于业务需求,软件的每一个版本都有不同的证书”,这意味着有很多公钥,并且只有一个可以解密任何公共的私钥。@亚历克斯,不,每个版本都有不同的私有证书,协议的一部分包括握手时的版本号,因此,服务器查找了正确的公共证书来解码特定的私人证书。这里有一个链接,您可能需要查看,以防您需要其他实用程序。我也为位于CodeProjects上的项目发布了一个链接,这是我认为应该的-加密和解密数据的方法。但使用该应用程序的每位员工都会使用一把钥匙。主要的问题是使用我的应用程序为他们提供新密钥。您必须查看公钥和私钥。。还有,为什么不让一个应用程序知道密钥,并通过AD/LDAP/SSO等建立某种身份验证方法呢。。或者,如果他们是一个有效的用户,那么BAM!他们可以获得他们的信息和/或任务。。只是一个想法如果你想学习如何使用密码短语,也看看这个链接,这是一个好主意!您认为可以使用VPN在专用网络内进行通信吗