【问题标题】:what kind of hashing does umbraco use in its membership providerumbraco 在其会员提供者中使用什么样的散列
【发布时间】:2017-09-12 23:15:54
【问题描述】:

我需要将用户从 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);

【问题讨论】:

  • 你真的拯救了我的一天,感谢分享。

标签: hash umbraco


【解决方案1】:

更具体地说,它使用this particular class 对密码进行哈希处理。 This 应该作为一个简单的实现示例。

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

【讨论】:

  • 不幸的是,我必须创建一个 javascript 实现,因此我无法扩展或使用 .net 类。我尝试了一个带有空白键的默认 hmacsha1,但似乎没有重现相同的结果。
  • 啊哈,好的旧javascript实现。我猜..mobile?:) 不管怎样,我知道我在过去的某个时候遇到过这个问题。问题是您正在使用的库使用的编码(我假设 crypto.js)。 This 线程应该证明是有启发性的。
【解决方案2】:

Umbraco 使用 ASP.NET Membership Provider 模型,这意味着所有随 ASP.NET 开箱即用提供的抽象类都能够访问 Umbraco Member。 有关 ASP.NET 成员资格提供程序的更多信息,请查看 this link

【讨论】:

  • 根据 asp.net 会员提供者文档,默认情况下它是一个带有 base64 编码的 sha1 哈希,但这不会产生上述结果。是否有默认盐值?
【解决方案3】:

如果你想用 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)); 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多