asp.net SQLMembershipProvider和Umbraco成员资格提供程序中的加密密码

asp.net SQLMembershipProvider和Umbraco成员资格提供程序中的加密密码,asp.net,encryption,umbraco,sqlmembershipprovider,Asp.net,Encryption,Umbraco,Sqlmembershipprovider,这里是安全区 我正在尝试从asp.net会员身份转变为翁布拉科会员身份。但是使用passwordFormat=“Encrypted”似乎在Umbraco成员资格提供商和Microsoft的SQL成员资格提供商之间加密不同 如果我向SQL成员资格提供程序(使用passwordFormat=“Encrypted”)注册两个用户,则编码的密码不同。如果我对Umbraco供应商也这么做,他们是一样的 虽然所有字符串都解密为相同的内容(正确的密码),但我显然不能使用由umbraco数据库中的SQL成员资格

这里是安全区

我正在尝试从asp.net会员身份转变为翁布拉科会员身份。但是使用passwordFormat=“Encrypted”似乎在Umbraco成员资格提供商和Microsoft的SQL成员资格提供商之间加密不同

如果我向SQL成员资格提供程序(使用passwordFormat=“Encrypted”)注册两个用户,则编码的密码不同。如果我对Umbraco供应商也这么做,他们是一样的

虽然所有字符串都解密为相同的内容(正确的密码),但我显然不能使用由umbraco数据库中的SQL成员资格提供程序加密的密码(ValidateUser失败)

有人有什么想法吗

注意:我在两个站点上使用相同的machineKey


编辑:在Umbraco会员资格提供程序上调用EncryptPassword()和EncodePassword()会得到不同的结果,而EncodePassword是正确的调用方法。但在.NET成员资格提供程序上,EncodePassword不可用。这是我困惑的另一部分。

使用
System.Security.Cryptography.HMACSHA1
类对Umbraco密码进行散列。我猜你可以用HMACSHA1散列SQL成员资格用户密码并称之为好密码


有关更多详细信息,请参阅。

密码可能会有所不同,因为它们是咸的。查看成员资格数据库中的PasswordSalt列,它应该是Base64字符串。

密码可能不同,因为它们是咸的。请查看会员数据库中的PasswordSalt列,它应该是Base64字符串。@Infotekka经过深思熟虑后,我很确定它是正确的-因为.NET有salts,而Umbraco没有。我没有意识到加密(不是散列)可以使用salt(主要是因为我不知道如何在不知道salt的情况下返回原始明文)。现在做一个适当的测试-如果我更换了盐,它将不允许我登录。就这样@Infotekka现在我已经检查过了,你想让这是一个真正的答案,我会把它标记为正确的-谢谢你的清晰!马上,我把我的评论复制到下面的答案中——很高兴能帮上忙!它使用的是加密,而不是散列。我100%确信这一点,因为我可以解密DB字符串(这在哈希中是不可能的)。@IanGrainger,
UmbracoMembershipProvider
默认情况下将
passwordFormat
设置为
Hashed
,除非您将其设置为
Encrypted
。是的,我使用了Encrypted。