2017-02-04 8 views
0

노드 js를 사용하여 텍스트를 해시드 ID로 변환하고 싶습니다. 이미 js를 사용하여 수행 할 수있는 동일한 종류의 구현을 변환 할 Java 프로그램이 있습니다.노드 js에서 텍스트를 해시로 변환

자바 코드

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