Code
//建个实例
var smp = new SqlMembershipProvider();
//反射出生成盐巴的办法
var GenerateSalt 
= typeof(SqlMembershipProvider).GetMethod("GenerateSalt", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
//反射出编码密码的办法
var EncodePassword 
= typeof(SqlMembershipProvider).GetMethod("EncodePassword", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
//用创建的实例生成一个密码,像这样的
:ut_U6fX1hUK^Ig
var pwSrc = smp.GeneratePassword();
//生成一个盐巴,像这样的:m1mFOFC2wj4IEwQ0FtHs7g==
var salt 
= GenerateSalt.Invoke(smp, new object[] { });
//用盐巴给密码调味儿:),像这样的:BtU4iI3BZ6Zomfu8WRgrAIeMvS9FoudK87aNSpUKem9p/vbhZVKZld+vy0ktsAe6
var pwDest 
= EncodePassword.Invoke(smp, new object[] { pwSrc, 2, salt });

 

SqlMembershipProvider是System.Web下的类

2是密码格式中的Encrypted,其它两种分别是Clear(0), Hashed(1)

注意反射internal方法的时候要用:System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance 组合,

只用一个,是反射不出来的哦

posted on 2009-03-31 16:48  asterzhao  阅读(326)  评论(0)    收藏  举报