2017-02-04 61 views
0

我想使用節點js將文本轉換爲數字的散列值。已經有一個Java程序來轉換,但使用節點js完成相同類型的實現。將文本轉換爲節點js中的散列值

Java代碼的

public static long generateId(String text) { 

    byte[] buffer = null; 
    MessageDigest md = null; 
    try { 
     md = MessageDigest.getInstance("SHA1"); 
     md.reset(); 
     buffer = text.getBytes(Charsets.UTF_8); 

    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    md.update(buffer); 
    byte[] digest = md.digest(); 
    String hexStr = ""; 
    for (int i = 0; i < digest.length; i++) { 
     hexStr += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1); 
    } 
    long hashid = 0; 
    for (int i = 0; i < hexStr.length(); i++) 
     hashid += Math.abs((long) Math.pow(27, 10 - i) * ('a' - (1 + hexStr.charAt(i)))); 

    return hashid; 
} 

我能夠在這之後,我無法繼續轉化爲高達的NodeJS消化。

function generateHashCode() 
 
{ 
 
var text = '9/01/2017'+'xx'+'405'+''+'SDD'+'MDD'+'9'; 
 
var crypto = require('crypto'); 
 
console.log(crypto.createHash('SHA1').update(text).digest("hex")); 
 
var hexDigest = crypto.createHash('SHA1').update(text).digest("hex"); 
 
var hexStr; 
 
}

請幫我在這

回答

0
function generateHashCode(text) 
{ 
    // assuming text is UTF-8 encoded 

    var crypto = require('crypto'); 
    var hexDigest = crypto.createHash('SHA1').update(text).digest(); // this should be .digest() not .digest('hex') 

    var hexStr = ""; 
    for (var i = 0; i < hexDigest.length; i++) { 
     hexStr += (((hexDigest[i] - 0x100) & 0xff) + 0x100).toString(16).substr(1); // fixed some math issues here 
    } 

    var hashid = 0; 
    var a = 'a'.charCodeAt(0); // or just var a = 97; 
    for (var i = 0; i < hexStr.length; i++) 
     hashid += Math.abs(Math.pow(27, 10 - i) * (a - (1 + hexStr.charCodeAt(i)))); 

    return hashid; 
} 

console.log(generateHashCode("batman")); 
+0

謝謝!最後一次迭代返回NaN – user3671807

+0

@ user3671807究竟在哪裏?解釋更多! –

+0

最後一個for循環中的hashid返回NaN,不確定是否缺少一些東西。 – user3671807