我需要将用户从Umbraco移到另一个CMS,并且所有密码都会被哈希处理。我想阻止用户重置他们的密码,并希望在新的CMS中实现相同的散列算法。
Umbraco在其会员提供商中使用什么哈希类型?
例如
“W477AMlLwwJQeAGlPZKiEILr8TA =”是“测试”的哈希值
我无法使用.net,必须在javascript中重新实现此哈希。
更新答案:
//not sure why I can't use cryptojs's utf16LE function
//words = CryptoJS.enc.Utf16LE.parse("test");
//utf16 = CryptoJS.enc.Utf16LE.stringify("test");
function str2rstr_utf16le(input) {
var output = [],
i = 0,
l = input.length;
for (; l > i; ++i) {
output[i] = String.fromCharCode(
input.charCodeAt(i) & 0xFF,
(input.charCodeAt(i) >>> 8) & 0xFF
);
}
return output.join('');
}
var pwd = str2rstr_utf16le("test");
var hash = CryptoJS.HmacSHA1(pwd, pwd);
var encodedPassword = CryptoJS.enc.Base64.stringify(hash);
alert(encodedPassword);
答案 0 :(得分:5)
更具体地说,它使用this particular class来散列密码。 This应该作为一个简单的实现示例。
就像Martijn指出的那样,Umbraco使用标准的提供者模型。因此,您可以通过抽象类轻松访问它,和创建您自己的成员资格提供程序实现。
答案 1 :(得分:3)
Umbraco正在使用ASP.NET成员资格提供程序模型,这意味着所有使用ASP.NET提供的抽象类都能够访问Umbraco成员。 有关ASP.NET成员资格提供程序的详细信息,请查看this link。
答案 2 :(得分:0)
如果你想用C#做, 您可以使用以下散列方法:
public static string GetHash(string password) {
byte[] passwordBytes = Encoding.Unicode.GetBytes(password);
using (var hash = new HMACSHA1(passwordBytes)){
return Convert.ToBase64String(hash.ComputeHash(passwordBytes));
}
}