10/10/2018, 10:43

[TUTOR] Tạo hàm mã hóa MD5 bằng JavaScript

Trông các php server-script , chúng ta có thể gọi hàm MD5() để mã hóa một chuỗi , tuy nhiên cũng có thể mã hóa một chuỗi ngay trên trang web mà không cần server support PHP cũng được

PHP Code:
/*
 *  md5.jvs 1.0b 27/06/96
 *
 * Javascript implementation of the RSA Data Security, Inc. MD5
 * Message-Digest Algorithm.
 *
 * Copyright (c) 1996 Henri Torgemane. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for any purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies.
 *
 * Of course, this soft is provided "as is" without express or implied
 * warranty of any kind.
 */



function array(n) {
  for(
i=0;i<n;i++) this***91;i***93;=0;
  
this.length=n;
}

/* Some basic logical functions had to be rewritten because of a bug in
 * Javascript.. Just try to compute 0xffffffff >> 4 with it..
 * Of course, these functions are slower than the original would be, but
 * at least, they work!
 */

function integer(n) { return n%(0x7fffffff+0x7fffffff+2); }

function 
shr(a,b) {
  
a=integer(a);
  
b=integer(b);
  if (
a-(0x7fffffff+1)>=0) {
    
a=a%(0x7fffffff+1);
    
a=>> b;
    
a+=0x40000000>>(b-1);
  } else
    
a=>> b;
  return 
a;
}

function 
shl1(a) {
  
a=a%(0x7fffffff+1);
  if (
a&0x40000000==0x40000000)
  {
    
a-=0x40000000;  
    
a*=2;
    
a+=(0x7fffffff+1);
  } else
    
a*=2;
  return 
a;
}

function 
shl(a,b) {
  
a=integer(a);
  
b=integer(b);
  for (var 
i=0;i<b;i++) a=shl1(a);
  return 
a;
}

function and(
a,b) {
  
a=integer(a);
  
b=integer(b);
  var 
t1=(a-0x7fffffff-1);
  var 
t2=(b-0x7fffffff-1);
  if (
t1>=0
    if (
t2>=0
      return ((
t1&t2)+(0x7fffffff+1));
    else
      return (
t1&b);
  else
    if (
t2>=0)
      return (
a&t2);
    else
      return (
a&b);  
}

function or(
a,b) {
  
a=integer(a);
  
b=integer(b);
  var 
t1=(a-(0x7fffffff+1));
  var 
t2=(b-(0x7fffffff+1));
  if (
t1>=0
    if (
t2>=0
      return ((
t1|t2)+(0x7fffffff+1));
    else
      return ((
t1|b)+(0x7fffffff+1));
  else
    if (
t2>=0)
      return ((
a|t2)+(0x7fffffff+1));
    else
      return (
a|b);  
}

function xor(
a,b) {
  
a=integer(a);
  
b=integer(b);
  var 
t1=(a-(0x7fffffff+1));
  var 
t2=(b-(0x7fffffff+1));
  if (
t1>=0
    if (
t2>=0
      return (
t1^t2);
    else
      return ((
t1^b)+(0x7fffffff+1));
  else
    if (
t2>=0)
      return ((
a^t2)+(0x7fffffff+1));
    else
      return (
a^b);  
}

function 
not(a) {
  
a=integer(a);
  return (
0x7fffffff+0x7fffffff+1-a);
}

/* Here begin the real algorithm */

    
var state = new array(4); 
    var 
count = new array(2);
    
count***91;0***93; = 0;
    
count***91;1***93; = 0;                     
    var 
buffer = new array(64); 
    var 
transformBuffer = new array(16); 
    var 
digestBits = new array(16);

    var 
S11 7;
    var 
S12 12;
    var 
S13 17;
    var 
S14 22;
    var 
S21 5;
    var 
S22 9;
    var 
S23 14;
    var 
S24 20;
    var 
S31 4;
    var 
S32 11;
    var 
S33 16;
    var 
S34 23;
    var 
S41 6;
    var 
S42 10;
    var 
S43 15;
    var 
S44 21;

    function 
F(x,y,z) {
    return or(and(
x,y),and(not(x),z));
    }

    function 
G(x,y,z) {
    return or(and(
x,z),and(y,not(z)));
    }

    function 
H(x,y,z) {
    return xor(xor(
x,y),z);
    }

    function 
I(x,y,z) {
    return xor(
,or(not(z)));
    }

    function 
rotateLeft(a,n) {
    return or(
shl(an),(shr(a,(32 n))));
    }


    function 
FF(a,b,c,d,x,s,ac) {
        
a+F(bcd) + ac;
    
rotateLeft(as);
    
a+b;
    return 
a;
    }

    function 
GG(a,b,c,d,x,s,ac) {
    
a+G(bcd) +ac;
    
rotateLeft(as);
    
a+b;
    return 
a;
    }

    function 
HH(a,b,c,d,x,s,ac) {
    
a+H(bcd) + ac;
    
rotateLeft(as);
    
a+b;
    return 
a;
    }

    function 
II(a,b,c,d,x,s,ac) {
    
a+I(bcd) + ac;
    
rotateLeft(as);
    
a+b;
    return 
a;
    }

    function 
transform(buf,offset) { 
    var 
a=0b=0c=0d=0
    var 
transformBuffer;
    
    
state***91;0***93;;
    
state***91;1***93;;
    
state***91;2***93;;
    
state***91;3***93;;
    
    for (
016i++) {
        
x***91;i***93; = and(buf***91;i*4+offset***93;,0xff);
        for (
14j++) {
        
x***91;i***93;+=shl(and(buf***91;i*4+j+offset***93; ,0xff), 8);
        }
    }

    
/* Round 1 */
    
FF abcdx***91; 0***93;, S110x576aa479+0x7fffffff); /* 1 */
    
FF dabcx***91; 1***93;, S120x68c7b757+0x7fffffff); /* 2 */
    
FF cdabx***91; 2***93;, S130x242070db); /* 3 */
    
FF bcdax***91; 3***93;, S140x41bdceef+0x7fffffff); /* 4 */
    
FF abcdx***91; 4***93;, S110x757c0fb0+0x7fffffff); /* 5 */
    
FF dabcx***91; 5***93;, S120x4787c62a); /* 6 */
    
FF cdabx***91; 6***93;, S130x28304614+0x7fffffff); /* 7 */
    
FF bcdax***91; 7***93;, S140x7d469502+0x7fffffff); /* 8 */
    
FF abcdx***91; 8***93;, S110x698098d8); /* 9 */
    
FF dabcx***91; 9***93;, S120x0b44f7b0+0x7fffffff); /* 10 */
    
FF cdabx***91;10***93;, S130x7fff5bb2+0x7fffffff); /* 11 */
    
FF bcdax***91;11***93;, S140x095cd7bf+0x7fffffff); /* 12 */
    
FF abcdx***91;12***93;, S110x6b901122); /* 13 */
    
FF dabcx***91;13***93;, S120x7d987194+0x7fffffff); /* 14 */
    
FF cdabx***91;14***93;, S130x2679438f+0x7fffffff); /* 15 */
    
FF bcdax***91;15***93;, S140x49b40821); /* 16 */

    /* Round 2 */
    
GG abcdx***91; 1***93;, S210x761e2563+0x7fffffff); /* 17 */
    
GG dabcx***91; 6***93;, S220x4040b341+0x7fffffff); /* 18 */
    
GG cdabx***91;11***93;, S230x265e5a51); /* 19 */
    
GG bcdax***91; 0***93;, S240x69b6c7ab+0x7fffffff); /* 20 */
    
GG abcdx***91; 5***93;, S210x562f105e+0x7fffffff); /* 21 */
    
GG dabcx***91;10***93;, S220x02441453); /* 22 */
    
GG cdabx***91;15***93;, S230x58a1e682+0x7fffffff); /* 23 */
    
GG bcdax
pixelart viết 12:51 ngày 10/10/2018
má ơi ! ... sao muh dài thế .... có cách khác ngắn hơn ko ???
COTTONBELLY viết 12:47 ngày 10/10/2018
bác cứ copy/paste cái đoạn mã js thứ nhất vào một file JS , khi nào xài thì cứ việc "include" nó vào trang HTML bằng thẻ <script> là được
BonBon viết 12:59 ngày 10/10/2018
cool script !
tiensoft viết 12:56 ngày 10/10/2018
Bài viết này rất hay.

Bạn có thể modify lại để có thể sử dụng cho ASP không ? Xin cám ơn rất nhiều.
tiensoft viết 12:50 ngày 10/10/2018
Bài viết này rất hay.

Bạn có thể modify lại để có thể sử dụng cho ASP không ? Xin cám ơn rất nhiều.
White_Rose viết 12:46 ngày 10/10/2018
Bạn đi tìm forum Snitz (phiên bản cũ hơn bản hiện tại một chút, nó bao gồm một file include thực hiện việc này trong mã nguồn).
Hay bạn lấy luôn ở đây:
http://207.150.221.94/ws-ihatelov/vb...asp.asp?id=347
http://207.150.221.94/ws-ihatelov/vb...asp.asp?id=353
Happy
tiensoft viết 12:52 ngày 10/10/2018
Thank you

Tôi đã mã hoá được, nhưng không biết cách giải mã như thế nào.

White_Horse giúp giùm nhé.
Hynohun viết 12:44 ngày 10/10/2018
nếu là ASP thì nên sử dụng mã hóa SHA_256
hình như là VieBoard cũng sử dụng cái này
COTTONBELLY viết 12:59 ngày 10/10/2018
to tiensoft : MD5 là hàm mã hóa một chiều nên nó chỉ có "mã" chứ không "giải" được :-)
Bài liên quan
0