通过数据库传递密码如何使其安全

Thi*_*ser 5 c# sql sql-server security

我正在开发一个在多个服务器上运行的应用程序.其中一个服务器处理输入,其他服务器执行它.由于公司政策,一切都必须通过数据库,不允许实例之间的套接字.

现在这适用于所有事情,但有一件令我担心的是密码.我目前正在实现一些需要用户密码才能以纯文本形式到达其中一个应用程序的东西.现在我明白这永远不会100%安全,但我如何将风险降至最低?目前我计划将pw放入数据库并在数据库到达后从数据库中擦除它.日志每天删除一次.我怎样才能明智地改善这种安全性?

Jad*_*ine 5

您可以使用此方法加密密码:

     public string Encrypt(string stringToEncrypt, string SEncryptionKey)
        {
                key = System.Text.Encoding.UTF8.GetBytes(SEncryptionKey);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                return Convert.ToBase64String(ms.ToArray());              
        }
Run Code Online (Sandbox Code Playgroud)

通过使用:

  private byte[] key = { };
  private byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
Run Code Online (Sandbox Code Playgroud)

然后你可以插入数据库

 password = ...
 password = Encrypt(password.Trim(), "r0b1nr0y");

// Insert in db
Run Code Online (Sandbox Code Playgroud)

对于解密,您可以使用此方法:

public string Decrypt(string stringToDecrypt, string sEncryptionKey)
{
        byte[] inputByteArray = new byte[stringToDecrypt.Length + 1];
        key = System.Text.Encoding.UTF8.GetBytes(sEncryptionKey);
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        inputByteArray = Convert.FromBase64String(stringToDecrypt);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        System.Text.Encoding encoding = System.Text.Encoding.UTF8;
        return encoding.GetString(ms.ToArray());
}
Run Code Online (Sandbox Code Playgroud)