【发布时间】:2015-10-05 14:23:49
【问题描述】:
我想在 C# 中解密密码我正在使用下面的代码。
public class NetFourMembershipProvider : SqlMembershipProvider
{
public string GetClearTextPassword(string encryptedPwd)
{
try
{
byte[] encodedPassword = Convert.FromBase64String(encryptedPwd);
byte[] bytes = this.DecryptPassword(encodedPassword);
if (bytes == null)
{
return null;
}
return Encoding.Unicode.GetString(bytes, 0x10, bytes.Length - 0x10);
}
catch (Exception)
{
throw;
}
}
}
我的网络配置文件是
<configuration>
<system.web>
<machineKey validationKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" decryptionKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" decryption="3DES" validation="SHA1" />
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SiteSqlServer" enablePasswordRetrieval="true"
enablePasswordReset="true" requiresQuestionAndAnswer="false"
minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="false"
passwordFormat="Encrypted"
applicationName="DotNetNuke"
description="Stores and retrieves ......." />
</providers>
</membership>
<compilation debug="true" targetFramework="4.0" />
</system.web>
在这一行byte[] bytes=this.DecryptPassword(encodedPassword); 我收到以下错误消息。
您必须指定非自动生成的机器密钥才能以加密格式存储密码。指定不同的密码格式,或更改 machineKey 配置以使用非自动生成的解密密钥。
如何转换密码。
请帮帮我。
注意:validationkey 是 40 个字符,decryptionKey 是 48 个字符长的数据。
提前致谢
【问题讨论】:
-
如果可能的话,我会避免以可解密的格式存储密码。密码加密应该是单向的。
-
单向加密 = 散列!
-
看看这里,你会找到有用的答案:stackoverflow.com/questions/10168240/…
标签: c# html asp.net encryption