Last active
October 19, 2015 08:52
-
-
Save cdjhlee/bf8274295f17e69da505 to your computer and use it in GitHub Desktop.
문자열을 MD5로 지져서 나머지 연산하는 거
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var crypto = require('crypto'); | |
//문자열을 md5 해시하여 buffer로 리턴한다. | |
function getMd5Buffer(str) { | |
var md5sum = crypto.createHash('md5'); | |
return md5sum.update(str).digest(); | |
} | |
function getLargeMod(buffer, mod) { | |
var bufLen = buffer.length; | |
var modArray = []; | |
var i, r, result = 0; | |
for(i=0;i<bufLen;++i) { | |
//바이트 1개당 0~255(2^8)까지 가능하므로 256진법으로 계산한다. | |
r = ((buffer[i]%mod) * (expMod(256, (i-1), mod))) % mod; | |
modArray.push(r); //각 바이트별 | |
} | |
for(i=0;i<bufLen;++i) { | |
result = ((result % mod) + (modArray[i] % mod)) % mod; | |
} | |
return result; | |
} | |
//지수함수 나머지 연산 | |
function expMod(a, n, z) { | |
var result = 1; | |
var x = a % z; | |
while(n > 0) { | |
if(n % 2 == 1) { | |
result = (result * x) % z; | |
} | |
x = (x * x) % z; | |
n = ~~(n/2); | |
} | |
return result; | |
} | |
/** | |
* 문자열을 MD5 해싱 후 원하는 값으로 나머지 연산을 한다. | |
* @param str 원하는 문자열 | |
* @param mod 나머지 | |
* @return Number 예외 발생 시 -1 리턴 | |
*/ | |
exports.md5Mod = function(str, mod) { | |
try { | |
return getLargeMod(getMd5Buffer(str), mod); | |
} catch(e) { | |
console.error(e); | |
return -1; | |
} | |
}; |
Line 6. what the... I will fix it. thanks.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
적당히 응용하면 문자열을 MD5도 안하고 바로 나머지 하는 것도 가능합니다. ㅇㅅㅇ