JavaScript를위한 간단한 (비보안) 해시 함수? [복제]
가능한 중복 :
Javascript / jQuery의 문자열에서 해시 생성
누구나 (브라우저 호환) JavaScript로 작성된 간단한 (즉, 수백 줄이 아닌 수십 줄의 코드) 해시 함수를 제안 할 수 있습니까? 이상적으로는 문자열을 입력으로 전달할 때 MD5, SHA1 등의 일반적인 출력 인 32 문자 16 진수 문자열과 비슷한 것을 생성하고 싶습니다. 암호 적으로 안전 할 필요는 없으며 충돌에 합리적으로 저항 할 필요가 없습니다. . (내 초기 사용 사례는 URL이지만 나중에 다른 문자열에서도 사용하고 싶습니다.)
나는 이것을 직접 확인하지는 않았지만 Java의 String.hashCode () 메소드의 JavaScript 구현을 볼 수 있습니다 . 합리적으로 짧은 것 같습니다.
이 프로토 타입을 사용하면
.hashCode()예를 들어 문자열을 호출"some string".hashCode()하고 1395333309와 같은 숫자 해시 코드 (특히 Java에 해당)를받을 수 있습니다.
String.prototype.hashCode = function() {
var hash = 0;
if (this.length == 0) {
return hash;
}
for (var i = 0; i < this.length; i++) {
var char = this.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}
JS로 작성된 많은 해시 함수가 있습니다. 예를 들면 다음과 같습니다.
- SHA-1 : http://www.webtoolkit.info/javascript-sha1.html
- SHA-256 : http://www.webtoolkit.info/javascript-sha256.html
- MD5 : http://www.webtoolkit.info/javascript-md5.html
보안이 필요하지 않은 경우 해시 함수가 아니며 출력을 수정하지 않았으며 사용자가 간단하게 디코딩 할 수 있지만 더 가벼워 보이고 숨기기 값에 사용할 수있는 base64를 사용할 수도 있습니다 : http : // www. webtoolkit.info/javascript-base64.html
이러한 구현을 확인하십시오
- http://www.movable-type.co.uk/scripts/sha1.html(SHA-1 알고리즘)
- http://pajhome.org.uk/crypt/md5/(SHA-1 , MD5, HMAC 및 기타를위한 구현)
이 기사에서는 간단한 해시 함수 에 대해 자세히 설명하고 매우 간단한 샘플 코드 (C)를 제공합니다. 과 같은 밥 젠킨스 '해시 함수는 사용자의 요구에 적합 할 수있다 (이 박사 돕 스는 기사는 자세한 내용과 다른 해시 함수의 조사, 둘 다 도움이 될 수있다).
간단한 객체 세척기 :
(function () {
Number.prototype.toHex = function () {
var ret = ((this<0?0x8:0)+((this >> 28) & 0x7)).toString(16) + (this & 0xfffffff).toString(16);
while (ret.length < 8) ret = '0'+ret;
return ret;
};
Object.hashCode = function hashCode(o, l) {
l = l || 2;
var i, c, r = [];
for (i=0; i<l; i++)
r.push(i*268803292);
function stringify(o) {
var i,r;
if (o === null) return 'n';
if (o === true) return 't';
if (o === false) return 'f';
if (o instanceof Date) return 'd:'+(0+o);
i=typeof o;
if (i === 'string') return 's:'+o.replace(/([\\\\;])/g,'\\$1');
if (i === 'number') return 'n:'+o;
if (o instanceof Function) return 'm:'+o.toString().replace(/([\\\\;])/g,'\\$1');
if (o instanceof Array) {
r=[];
for (i=0; i<o.length; i++)
r.push(stringify(o[i]));
return 'a:'+r.join(';');
}
r=[];
for (i in o) {
r.push(i+':'+stringify(o[i]))
}
return 'o:'+r.join(';');
}
o = stringify(o);
for (i=0; i<o.length; i++) {
for (c=0; c<r.length; c++) {
r[c] = (r[c] << 13)-(r[c] >> 19);
r[c] += o.charCodeAt(i) << (r[c] % 24);
r[c] = r[c] & r[c];
}
}
for (i=0; i<r.length; i++) {
r[i] = r[i].toHex();
}
return r.join('');
}
}());
여기서 고기는 모든 객체를 고유 한 문자열로 간단히 변환하는 stringifier입니다. 그런 다음 hashCode는 객체를 실행하여 문자열 화 된 객체의 문자를 해시합니다.
추가 포인트를 얻으려면 stringifier를 내보내고 파서를 만듭니다.
// Simple but unreliable function to create string hash by Sergey.Shuchkin [t] gmail.com
// alert( strhash('http://www.w3schools.com/js/default.asp') ); // 6mn6tf7st333r2q4o134o58888888888
function strhash( str ) {
if (str.length % 32 > 0) str += Array(33 - str.length % 32).join("z");
var hash = '', bytes = [], i = j = k = a = 0, dict = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','1','2','3','4','5','6','7','8','9'];
for (i = 0; i < str.length; i++ ) {
ch = str.charCodeAt(i);
bytes[j++] = (ch < 127) ? ch & 0xFF : 127;
}
var chunk_len = Math.ceil(bytes.length / 32);
for (i=0; i<bytes.length; i++) {
j += bytes[i];
k++;
if ((k == chunk_len) || (i == bytes.length-1)) {
a = Math.floor( j / k );
if (a < 32)
hash += '0';
else if (a > 126)
hash += 'z';
else
hash += dict[ Math.floor( (a-32) / 2.76) ];
j = k = 0;
}
}
return hash;
}
Check out this MD5 implementation for JavaScript. Its BSD Licensed and really easy to use. Example:
md5 = hex_md5("message to digest")
참고URL : https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
'Programing' 카테고리의 다른 글
| 멀티 프로세싱의 공유 메모리 개체 (0) | 2020.08.06 |
|---|---|
| 멀티 모듈 메이븐 프로젝트에서 모듈 간 src / test 클래스 공유 (0) | 2020.08.06 |
| HtmlString과 MvcHtmlString (0) | 2020.08.06 |
| 몽구스 하위 문서와 중첩 스키마 (0) | 2020.08.06 |
| fastcgi와 fpm의 차이점은 무엇입니까? (0) | 2020.08.06 |