如何在使用javascript进行散列之前规范化密码?

时间:2016-01-11 14:23:41

标签: javascript jquery node.js unicode-normalization

我在我的asp.net应用程序中使用Node.js库来使用它的UNorm.normalize函数来规范化密码字符串,例如这个UNorm.normalize(“NFC”,strpwd);但它没有给我任何输出。为了跟踪它,我在调试模式下执行它,我发现unorm.js文件函数fromData(next,cp,needFeature)发生错误,它说“javascript运行时错误无法获取未定义或空引用的属性'0'” 。如果我按下忽略按钮,它会显示输出,但如果我单击继续或中断按钮,则不会产生输出。我从http://git.io/unorm获得了Node.js库代码。我的应用程序代码如下:

<script type="text/javascript" src="unorm-master/src/unorm.js"></script>
<script type="text/javascript" language="javascript">

 function strNormalize()
 {  

    var nstr;
    var strpwd = 'αλφα';

    nstr = UNorm.normalize('NFC',strpwd);    

    document.getElementById("txtNormalize").value = nstr;  

 }
 </script>  

有谁能告诉我如何解决Node.js文件unorm.js中的这个问题?或者使用Javascript提出任何其他解决方案

3 个答案:

答案 0 :(得分:0)

通过https://github.com/bestiejs/punycode.js/转换为punycode然后哈希

只要您对两种方式进行相同的转换(例如,当您执行第一个哈希存储以及执行哈希验证时),您应该是好的。

e.g。你的例子的punycode将是“--mxaa3a7b”

答案 1 :(得分:0)

也许您正在错误地使用此库,自述文件中有一些示例,请尝试:

    //Get length of each side
    double a = Math.sqrt(Math.pow(x_2 - x_1, 2) + Math.pow(y_2 - y_1, 2)); // distance from 1 to 2
    double b = Math.sqrt(Math.pow(x_3 - x_2, 2) + Math.pow(y_3 - y_2, 2)); // distance from 2 to 3
    double c = Math.sqrt(Math.pow(x_1 - x_3, 2) + Math.pow(y_1 - y_3, 2)); // distance from 3 to 1
    //Get angles ***
    double triangleAngle1 = Math.acos((Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2)) / (2 * a * b));
    double triangleAngle2 = Math.acos((Math.pow(b, 2) + Math.pow(c, 2) - Math.pow(a, 2)) / (2 * c * b));
    double triangleAngle3 = Math.acos((Math.pow(c, 2) + Math.pow(a, 2) - Math.pow(b, 2)) / (2 * a * c));

答案 2 :(得分:0)

根据您定位的浏览器,您可以使用String.prototype.normalize()see documentation)。引用文档:

  

normalize()方法返回a的Unicode规范化表单   给定字符串(如果值不是一个字符串,它将被转换为一个字符串   第一)。

     

<强>参数

     

表单NFCNFDNFKCNFKD中的一个,指定Unicode   规范化表格。如果省略或未定义,则使用NFC

     
      
  • NFC - 规范化形式Canonical Composition。
  •   
  • NFD - 规范化形式规范分解。
  •   
  • NFKC - 规范化表单兼容性组合。
  •   
  • NFKD - 规范化表单兼容性分解。
  •   

作为示例,"\u1E9B\u0323".normalize()将使用NFC格式生成字符串。