【问题标题】:MD5 of an UTF16LE (without BOM and 0-Byte End) in Javascript (C# Example provided)Javascript 中 UTF16LE(无 BOM 和 0 字节结尾)的 MD5(提供 C# 示例)
【发布时间】:2014-02-06 11:50:56
【问题描述】:

我在以下问题上坐了几天:我需要在 JavaScript 中获取 UTF16-LE 编码字符串的 MD5 哈希。我有一个示例如何在 C# 中执行此操作,但不知道如何在 JavaScript 中执行此操作。

例子:

public string GetMD5Hash (string input) { 
 MD5 md5Hasher = MD5.Create(); 
 byte[] data = md5Hasher.ComputeHash(Encoding.Unicode.GetBytes(input)); 
 StringBuilder sb = new StringBuilder(); 
 for (int i = 0; i < data.Length; i++) { 
  sb.Append(data[i].ToString("x2")); 
 } 
 return sb.ToString(); 
}

通缉:

var getMD5Hash(input){
  ....
}

var t = getMD5Hash("1234567z-äbc");
console.log(t) // --> 9e224a41eeefa284df7bb0f26c2913e2 

我希望有人可以帮助我:-/

【问题讨论】:

  • JavaScript 使用 UTF16。如果你使用charCodeAt,你会得到你的字节。而且JS中有很多MD5的实现(见that related question
  • 感谢您的回答。我测试了所有的库,但没有一个提供正确的字符串...

标签: c# javascript md5


【解决方案1】:

给你

return challenge + "-" + require('crypto').createHash('md5').update(Buffer(challenge+'-'+password, 'UTF-16LE')).digest('hex')

【讨论】:

    【解决方案2】:
    let md5 = require('md5');
    
    function getMD5_UTF16LE(str){
        let bytes = [];
        for (let i = 0; i < str.length; ++i) {
          let code = str.charCodeAt(i);
          bytes = bytes.concat([code & 0xff, code / 256 >>> 0]);
        }
        return md5(bytes);
    }
    

    需要库https://www.npmjs.com/package/md5

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多