返回首页

您好,

我想我在aspnet_Membership表中存储的密码解密...

我用下面的代码,


Dim encodedPassword() As Byte = Convert.FromBase64String(password)

Dim decryptedPassword() As Byte = MyBase.DecryptPassword(encodedPassword)

If (decryptedPassword IsNot Nothing) Then

  Return System.Text.Encoding.UTF8.GetString(decryptedPassword, 0, decryptedPassword.Length)

End If

但在DecryptPassword(encodedPassword)线,它显示为
错误{C}谁能帮我解决它,请...| Arasu Rajendran

回答

评论会员:游客 时间:2012/02/07
我同意Kieth的解决方案。除了这个,我建议你不应该解密的密码,当您使用asp.net中的成员资格提供者建立。相反,当你想比较用户输入的密码和加密(哈希)存储在数据库中的密码,你应该阅读由用户输入的密码,然后对它进行加密,并比较它与从数据库平等的密码。|NandaKumer
查看这个博客

- NDK的
评论会员:游客 时间:2012/02/07
基思・巴罗:如果您还没有做过任何的正常机制(即您使用SqlMembershipProvider的)存储的密码,你在做什么不能工作时。理论上,你不能得到密码,因为它比加密而被散列。加密是一个双向的混合进化计算:如果你知道你可以得到有关的关键(S)值。哈希不同的是:该算法产生一个值,该值始终是相同的一个给定的输入和关键,但不能从一个哈希值可以收回,就算你有钥匙。技术上的价值,你正在试图解密是咸的哈希-盐防止有人发现人群前面加上盐随机密码相同的密码(产生相同的哈希)查询表。无盐很容易看到比较加盐哈希黑客使用常用密码。你真的只有三种选择:1。放弃-这完全取决于它是什么你需要准确的,这可能是一个有效的选项2。更换或子类的默认提供者3。使用内置的机制之一,重设密码,如果这是你想要acheive,请参阅:{A}编辑回应RajendranArasu的意见]第一,有decryptable密码代表的安全风险,所以我建议[咸]散列-这就是为什么微软在他们的供应商,它使用。无论你选择继续哈希或不,你并不需要解密的密码去改变它(有效什么你描述您的评论)。的MembershipProvider的实例有一个复位当前密码和新密码的方​​法。这是良好的安全性检查重置密码的人都知道"老字号"提供新的,如果你使用的是加密可以加密对后备存储的加密版本提供。如果你没有采取旧密码,网吧的人可能会记录在会议结束离开该网站,然后进入下一个用户可以到登录页面,并提供新的密码,不知道旧。提供程序模型,允许用户回答一个秘密的问题,如果他们不知道自己目前的密码,你可以做类似的代码,而不需要解密的密码。最后,我强烈建议您阅读:{A2的}]的差异,散列和加密安全性比较,它有一个很好的讨论。|