C#如何MD5加密

时间:2022-10-28 17:11:01
数据库是不怎么安全的,当我用C#连接数据库后,给别用的时候,他就可能看到我数据库里面的信息。但我想只让他查询访问等操作,肯定不能动我数据库里面的东西,更不能把我里面的信息取走了,所以我必须给我数据库用MD5加密?但我不会加密,怎么办?你能解决吗?

16 个解决方案

#1



 public static string GetMD5Hash(String input)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            byte[] res = md5.ComputeHash(Encoding.Default.GetBytes(input), 0, input.Length);
            char[] temp = new char[res.Length];

            System.Array.Copy(res, temp, res.Length);

            return new String(temp);
        }

        /// <summary>
        /// 获得MD5的16进制结果
        /// </summary>

        public static string GetMD5HashHex(String input)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            DES des = new DESCryptoServiceProvider();
            byte[] res = md5.ComputeHash(Encoding.Default.GetBytes(input), 0, input.Length);

            String returnThis = "";

            for (int i = 0; i < res.Length; i++)
            {
                returnThis += System.Uri.HexEscape((char)res[i]);
            }
            returnThis = returnThis.Replace("%", "");
            returnThis = returnThis.ToLower();

            return returnThis;


        }

#2


md5一般是用来加密密码的。是不可逆的。
        /// <summary>
        /// 获取MD5值
        /// </summary>
        /// <param name="str">加密的字符串</param>
        /// <returns>返回MD5值</returns>
        public static string GetMD5(string str)
        {
            return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5");
        }



要是可以加密可以解密的建议用base64

编码:
byte[] bytes=Encoding.Default.GetBytes("要转换的字符串");
Convert.ToBase64String(bytes);
解码:
//"ztKwrsTj"是“我爱你”的base64编码
byte[] outputb = Convert.FromBase64String("ztKwrsTj");
string orgStr= Encoding.Default.GetString(outputb);

#3


MD5算法是单向加密,一般只用作验证性加密,好像不是你说的密码式加密

#4


MD5加密一般是用在网站或者应用程序的用户明密码,等不需要明文显示的地方,对数据库全部加密一般都不用MD5,而是用三重DES加密,因为可以解密

#5


md5 加密只是加密数据。
配置数据库操作权限。用不同用户操作。如果有数据库,很难控制。

#6


告诉你一个方法,你给他一个数据库帐号让他只有别的权限,把对你数据库的权限只限定你的帐号可以进行更改就可以 了

#7


路过帮顶

#8


使用aspnet_regiis工具呀:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pef "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在加密配置节...
成功!

加密成功后:


<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
   xmlns="http://www.w3.org/2001/04/xmlenc#">
   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <KeyName>Rsa Key</KeyName>
     </KeyInfo>
     <CipherData>
      <CipherValue>cGqkexvQnfv/zp5pRwxnTwGeAXo6BfG0MQtwr6rOhdWUxRZxixWmcnPhnK6AHHZj2hCcp/TyXTJenQitrdNatQaGg2sSHut0MmyLg3OZkpXmQu5+ankm37/k+FIOdx9pY2qKtQEWgWK3EffyOnpDAEv8V6hQ9RomJqhLmw/JT4w=</CipherValue>
     </CipherData>
    </EncryptedKey>
   </KeyInfo>
   <CipherData>
    <CipherValue>k4OMiQEB9q4rHx9AavmEyBmvtsxY30kOr26D1aycMvWo6mZkWjDXFeGQcHdUkJa7Xd7oz/7ASjVvRoXYns6UfE9on00/VkfCZz/I95z0v+HR+KrXd9QaA3vre4qMc9GixnUr2Alz33otWg7lSdGKenD+eYIDfAmC/nHFOuN/NGavoD4j/NPBOeZw/CcMAqoMBPH/MVto7HkVxp3wOwD1SiZA+ldylycaSSNV8pS/Gmm3EaKNyFXrYB0YruntHTNz/LAhXDoz5s1d3Ol2BIp/MP3V9JM43WJbfFfqXGJjvKg=</CipherValue>
   </CipherData>
  </EncryptedData>
 </connectionStrings>


C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pdf "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在解密配置节...
成功!



解密成功后Connectionstring恢复原样:


  <add name="NorthwindConnectionString" connectionString="Data Source=WSR-PC;Initial Catalog=Northwind;Integrated Security=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>

#9


using System.Web.Security;

string 密文 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("明文", "MD5");

注意,MD5不可逆,只能加密不能解密,如果数据需要还原成明文再使用,不要用MD5。

#10


很明显LZ对MD5加密理解上有错误

#11


我的blog里有多种加密方法,可去参考。

#12


用MD5或者SHA1都是一样的。不可逆啊。

#13


怎么没有实际的可靠的答案呢   
整点实际的多学习学习理论 。。

#14


 public static string get32Md5(string str)
      {
          try
          {
              string cl = str;
              string pwd = "";
              MD5 md5 = MD5.Create();//实例化一个md5对像
              // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
              byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));

              // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得

              for (int i = 0; i < s.Length; i++)
              {
                  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 

                  pwd = pwd + s[i].ToString("X");

              }
              return pwd;
          }
          catch (Exception ex)
          {
              return null;
          }
      }

#15


wenrenhua08 你的加密程序在哪里我怎么没有找到啊。。

#16


引用 8 楼 mrwsr 的回复:
使用aspnet_regiis工具呀:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pef "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在加密配置节...
成功!

加密成功后……


踏破铁鞋无觅处 哈 哈  兄弟我正想要找这个呢  谢谢了

#1



 public static string GetMD5Hash(String input)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            byte[] res = md5.ComputeHash(Encoding.Default.GetBytes(input), 0, input.Length);
            char[] temp = new char[res.Length];

            System.Array.Copy(res, temp, res.Length);

            return new String(temp);
        }

        /// <summary>
        /// 获得MD5的16进制结果
        /// </summary>

        public static string GetMD5HashHex(String input)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            DES des = new DESCryptoServiceProvider();
            byte[] res = md5.ComputeHash(Encoding.Default.GetBytes(input), 0, input.Length);

            String returnThis = "";

            for (int i = 0; i < res.Length; i++)
            {
                returnThis += System.Uri.HexEscape((char)res[i]);
            }
            returnThis = returnThis.Replace("%", "");
            returnThis = returnThis.ToLower();

            return returnThis;


        }

#2


md5一般是用来加密密码的。是不可逆的。
        /// <summary>
        /// 获取MD5值
        /// </summary>
        /// <param name="str">加密的字符串</param>
        /// <returns>返回MD5值</returns>
        public static string GetMD5(string str)
        {
            return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5");
        }



要是可以加密可以解密的建议用base64

编码:
byte[] bytes=Encoding.Default.GetBytes("要转换的字符串");
Convert.ToBase64String(bytes);
解码:
//"ztKwrsTj"是“我爱你”的base64编码
byte[] outputb = Convert.FromBase64String("ztKwrsTj");
string orgStr= Encoding.Default.GetString(outputb);

#3


MD5算法是单向加密,一般只用作验证性加密,好像不是你说的密码式加密

#4


MD5加密一般是用在网站或者应用程序的用户明密码,等不需要明文显示的地方,对数据库全部加密一般都不用MD5,而是用三重DES加密,因为可以解密

#5


md5 加密只是加密数据。
配置数据库操作权限。用不同用户操作。如果有数据库,很难控制。

#6


告诉你一个方法,你给他一个数据库帐号让他只有别的权限,把对你数据库的权限只限定你的帐号可以进行更改就可以 了

#7


路过帮顶

#8


使用aspnet_regiis工具呀:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pef "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在加密配置节...
成功!

加密成功后:


<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
   xmlns="http://www.w3.org/2001/04/xmlenc#">
   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <KeyName>Rsa Key</KeyName>
     </KeyInfo>
     <CipherData>
      <CipherValue>cGqkexvQnfv/zp5pRwxnTwGeAXo6BfG0MQtwr6rOhdWUxRZxixWmcnPhnK6AHHZj2hCcp/TyXTJenQitrdNatQaGg2sSHut0MmyLg3OZkpXmQu5+ankm37/k+FIOdx9pY2qKtQEWgWK3EffyOnpDAEv8V6hQ9RomJqhLmw/JT4w=</CipherValue>
     </CipherData>
    </EncryptedKey>
   </KeyInfo>
   <CipherData>
    <CipherValue>k4OMiQEB9q4rHx9AavmEyBmvtsxY30kOr26D1aycMvWo6mZkWjDXFeGQcHdUkJa7Xd7oz/7ASjVvRoXYns6UfE9on00/VkfCZz/I95z0v+HR+KrXd9QaA3vre4qMc9GixnUr2Alz33otWg7lSdGKenD+eYIDfAmC/nHFOuN/NGavoD4j/NPBOeZw/CcMAqoMBPH/MVto7HkVxp3wOwD1SiZA+ldylycaSSNV8pS/Gmm3EaKNyFXrYB0YruntHTNz/LAhXDoz5s1d3Ol2BIp/MP3V9JM43WJbfFfqXGJjvKg=</CipherValue>
   </CipherData>
  </EncryptedData>
 </connectionStrings>


C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pdf "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在解密配置节...
成功!



解密成功后Connectionstring恢复原样:


  <add name="NorthwindConnectionString" connectionString="Data Source=WSR-PC;Initial Catalog=Northwind;Integrated Security=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>

#9


using System.Web.Security;

string 密文 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("明文", "MD5");

注意,MD5不可逆,只能加密不能解密,如果数据需要还原成明文再使用,不要用MD5。

#10


很明显LZ对MD5加密理解上有错误

#11


我的blog里有多种加密方法,可去参考。

#12


用MD5或者SHA1都是一样的。不可逆啊。

#13


怎么没有实际的可靠的答案呢   
整点实际的多学习学习理论 。。

#14


 public static string get32Md5(string str)
      {
          try
          {
              string cl = str;
              string pwd = "";
              MD5 md5 = MD5.Create();//实例化一个md5对像
              // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
              byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));

              // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得

              for (int i = 0; i < s.Length; i++)
              {
                  // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 

                  pwd = pwd + s[i].ToString("X");

              }
              return pwd;
          }
          catch (Exception ex)
          {
              return null;
          }
      }

#15


wenrenhua08 你的加密程序在哪里我怎么没有找到啊。。

#16


引用 8 楼 mrwsr 的回复:
使用aspnet_regiis工具呀:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pef "connectionStrings" "E:\ASP.NET WebSites\Practice_N
orthwind\Practice_Northwind"
正在加密配置节...
成功!

加密成功后……


踏破铁鞋无觅处 哈 哈  兄弟我正想要找这个呢  谢谢了