MD5密码存储

feng199 2009-08-02 02:35:45
要存储MD5加密的密码,有两个问题:
1.sql的字段该设置哪个类型?
2。MD5密码 写入该字段的sql语句怎么写?
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng199 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lzqayms 的回复:]
如果你不吝啬的话可以下来看看,可以运行的...........

http://download.csdn.net/source/1539758
[/Quote]

那样也拿得出手,真的服了你!
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 feng199 的回复:]
string md5pw = Security.MD5Encrypt(RePassword_TextBox.Text.Trim());

string sql = "insert into UserTable (UserName,UserPassword) values ('" + User_TextBox.Text.Trim() + "','" + md5pw + "')";

为什么执行该语句出错?[/Quote]

不知道你为什么出错。例子中已经写的很明白了,一个密码字符串如何计算MD5散列值以及SQL Server存取,你正常地套用例子就可以。

如果你让用户从界面上输入密码,记住不要直接把密码用来计算MD5值。因为MD5是可以(使用很强大的机器)在小时之内碰撞的,因此你可以:
1. 在用户输入的密码之前加入产品标志,例如“XXXXX公司的密码”。这样,就很难找到具有相同前缀的其它字符的MD5碰撞,而且打算寻找碰撞的人如果不知道你的前缀是什么则更无法在有生之年找到碰撞。
2. 对于用户密码的长度要做限制,例如必须多于7个字符并且少于40个字符。如果做了这个限制,既可以防止暴力破解,也可以给寻找MD5碰撞增加1千倍的复杂度。
lzqayms 2009-08-02
  • 打赏
  • 举报
回复
如果你不吝啬的话可以下来看看,可以运行的...........

http://download.csdn.net/source/1539758
feng199 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sp1234 的回复:]
MD5的hash计算之后得到的是字节数组。给你写个例子,SQL Server数据表中有两个字段

  SayHello: nvarchar(Max)
  MD5: binary(16)

下面测试读写它:

C# codeusing System.Data.SqlClient;using System.Diagnostics;using System.Linq;using System.Security.Cryptography;using System.Text;namespace ConsoleApplication1
{class Program
{staticvoid Main(string[] args)
{using (var conn=new SqlConnection("Data Source=WUWEI-HOME;Initial Catalog=test;Integrated Security=True"))
{
conn.Open();
SqlCommand comm=new SqlCommand("delete TestClass where SayHello='测试'", conn);
comm.ExecuteNonQuery();
comm=new SqlCommand("insert TestClass(SayHello,MD5) values(@p1,@p2)", conn);
comm.Parameters.Add(new SqlParameter("p1","测试"));var testdata= GetTestData();
comm.Parameters.Add(new SqlParameter("p2", testdata));
comm.ExecuteNonQuery();
comm=new SqlCommand("select top 1 * from TestClass where SayHello='测试'", conn);var rd= comm.ExecuteReader();
rd.Read();var output= (byte[])rd["MD5"];
Debug.Assert(testdata.Length== output.Length||!testdata.Any(b=>!output.Contains(b)),"output中缺少一个字节。");
}
}privatestaticbyte[] GetTestData()
{
MD5CryptoServiceProvider provider=new MD5CryptoServiceProvider();var ret= provider.ComputeHash(Encoding.Default.GetBytes("明月几时有把酒问青天不知天上宫阙今夕是何年"));return ret;
}
}
}
[/Quote]

UserName: nvarchar(Max)
UserPassword: binary(16)
********************************************

string md5pw = Security.MD5Encrypt(RePassword_TextBox.Text.Trim());

string sql = "insert into UserTable (UserName,UserPassword) values ('" + User_TextBox.Text.Trim() + "','" + md5pw + "')";

为什么执行该语句出错?
phoebuswei 2009-08-02
  • 打赏
  • 举报
回复
md5可以用字符串形式存储
注意:md5是散列之不可逆
        
/// <summary>
/// 得到MD5散列
/// </summary>
/// <param name="_str">需要计算的字符串</param>
/// <returns></returns>
private static string GetByetMD5(string _str)
{
return Convert.ToBase64String(new MD5CryptoServiceProvider().ComputeHash(Encoding.Unicode.GetBytes(_str)));
}
  • 打赏
  • 举报
回复
|| 应该修改为 &&。
  • 打赏
  • 举报
回复
MD5的hash计算之后得到的是字节数组。给你写个例子,SQL Server数据表中有两个字段

SayHello: nvarchar(Max)
MD5: binary(16)

下面测试读写它:

using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (var conn = new SqlConnection("Data Source=WUWEI-HOME;Initial Catalog=test;Integrated Security=True"))
{
conn.Open();
SqlCommand comm = new SqlCommand("delete TestClass where SayHello='测试'", conn);
comm.ExecuteNonQuery();
comm = new SqlCommand("insert TestClass(SayHello,MD5) values(@p1,@p2)", conn);
comm.Parameters.Add(new SqlParameter("p1", "测试"));
var testdata = GetTestData();
comm.Parameters.Add(new SqlParameter("p2", testdata));
comm.ExecuteNonQuery();
comm = new SqlCommand("select top 1 * from TestClass where SayHello='测试'", conn);
var rd = comm.ExecuteReader();
rd.Read();
var output = (byte[])rd["MD5"];
Debug.Assert(testdata.Length == output.Length || !testdata.Any(b => !output.Contains(b)),"output中缺少一个字节。");
}
}

private static byte[] GetTestData()
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
var ret = provider.ComputeHash(Encoding.Default.GetBytes("明月几时有把酒问青天不知天上宫阙今夕是何年"));
return ret;
}
}
}
BernardSun 2009-08-02
  • 打赏
  • 举报
回复
用字符型varchar之类的
插入语句就当普通的字符串就可以了

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧