5

我需要将用户从 Umbraco 转移到另一个 CMS,并且他们的所有密码都经过哈希处理。我想阻止用户重置他们的密码,并希望在新的 CMS 中实现相同的哈希算法。

Umbraco 在其会员提供者中使用什么散列类型?

例如

"W477AMlLwwJQeAGlPZKiEILr8TA=" 是 "test" 的哈希

我不能使用 .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);
4

3 回答 3

5

更具体地说,它使用这个特定的类来散列密码。应该作为一个简单的实现示例。

不过,就像 Martijn 指出的那样,Umbraco 使用标准提供者模型。因此,您既可以通过抽象类轻松访问它,也可以创建自己的成员资格提供程序实现。

于 2013-01-10T23:06:09.200 回答
3

Umbraco 使用 ASP.NET Membership Provider 模型,这意味着所有随 ASP.NET 开箱即用提供的抽象类都能够访问 Umbraco 成员。检查此链接以获取有关 ASP.NET 成员资格提供程序的更多信息。

于 2013-01-10T08:21:42.660 回答
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)); 
    }
}
于 2017-09-12T15:15:54.420 回答