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=a >> b;
a+=0x40000000>>(b-1);
} else
a=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(y ,or(x , not(z)));
}
function rotateLeft(a,n) {
return or(shl(a, n),(shr(a,(32 - n))));
}
function FF(a,b,c,d,x,s,ac) {
a = a+F(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}
function GG(a,b,c,d,x,s,ac) {
a = a+G(b, c, d) +x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}
function HH(a,b,c,d,x,s,ac) {
a = a+H(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}
function II(a,b,c,d,x,s,ac) {
a = a+I(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}
function transform(buf,offset) {
var a=0, b=0, c=0, d=0;
var x = transformBuffer;
a = state***91;0***93;;
b = state***91;1***93;;
c = state***91;2***93;;
d = state***91;3***93;;
for (i = 0; i < 16; i++) {
x***91;i***93; = and(buf***91;i*4+offset***93;,0xff);
for (j = 1; j < 4; j++) {
x***91;i***93;+=shl(and(buf***91;i*4+j+offset***93; ,0xff), j * 8);
}
}
/* Round 1 */
a = FF ( a, b, c, d, x***91; 0***93;, S11, 0x576aa479+0x7fffffff); /* 1 */
d = FF ( d, a, b, c, x***91; 1***93;, S12, 0x68c7b757+0x7fffffff); /* 2 */
c = FF ( c, d, a, b, x***91; 2***93;, S13, 0x242070db); /* 3 */
b = FF ( b, c, d, a, x***91; 3***93;, S14, 0x41bdceef+0x7fffffff); /* 4 */
a = FF ( a, b, c, d, x***91; 4***93;, S11, 0x757c0fb0+0x7fffffff); /* 5 */
d = FF ( d, a, b, c, x***91; 5***93;, S12, 0x4787c62a); /* 6 */
c = FF ( c, d, a, b, x***91; 6***93;, S13, 0x28304614+0x7fffffff); /* 7 */
b = FF ( b, c, d, a, x***91; 7***93;, S14, 0x7d469502+0x7fffffff); /* 8 */
a = FF ( a, b, c, d, x***91; 8***93;, S11, 0x698098d8); /* 9 */
d = FF ( d, a, b, c, x***91; 9***93;, S12, 0x0b44f7b0+0x7fffffff); /* 10 */
c = FF ( c, d, a, b, x***91;10***93;, S13, 0x7fff5bb2+0x7fffffff); /* 11 */
b = FF ( b, c, d, a, x***91;11***93;, S14, 0x095cd7bf+0x7fffffff); /* 12 */
a = FF ( a, b, c, d, x***91;12***93;, S11, 0x6b901122); /* 13 */
d = FF ( d, a, b, c, x***91;13***93;, S12, 0x7d987194+0x7fffffff); /* 14 */
c = FF ( c, d, a, b, x***91;14***93;, S13, 0x2679438f+0x7fffffff); /* 15 */
b = FF ( b, c, d, a, x***91;15***93;, S14, 0x49b40821); /* 16 */
/* Round 2 */
a = GG ( a, b, c, d, x***91; 1***93;, S21, 0x761e2563+0x7fffffff); /* 17 */
d = GG ( d, a, b, c, x***91; 6***93;, S22, 0x4040b341+0x7fffffff); /* 18 */
c = GG ( c, d, a, b, x***91;11***93;, S23, 0x265e5a51); /* 19 */
b = GG ( b, c, d, a, x***91; 0***93;, S24, 0x69b6c7ab+0x7fffffff); /* 20 */
a = GG ( a, b, c, d, x***91; 5***93;, S21, 0x562f105e+0x7fffffff); /* 21 */
d = GG ( d, a, b, c, x***91;10***93;, S22, 0x02441453); /* 22 */
c = GG ( c, d, a, b, x***91;15***93;, S23, 0x58a1e682+0x7fffffff); /* 23 */
b = GG ( b, c, d, a, x
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
Tác giả nổi bật
Từ khóa nổi bật
AngularJS
Blog
Bootstrap
C / C++
Cấu trúc dữ liệu & Giải thuật
Cơ sở dữ liệu
Codeigniter
Công cụ lập trình
CSS
CSS cơ bản
CSS3
Học Excel
HTML
HTML cơ bản
HTML5
Java
Javascript
jQuery
Json
Lập trình mobile
Laravel
Linux
MongoDB
MySQL
NodeJS
Oracle
Pascal
PHP
PHP cơ bản
PHP nâng cao
Python
React Native
ReactJS
Ruby
SEO
SQL Server
Swift
Visual Basic
VueJS
WordPress
XML
Chủ đề nổi bật
- 1 Cài đặt phần mềm cần thiết cho học lập trình web
- 2 Tự Học HTML Cơ Bản Online Miễn Phí Từ A đến Z
- 3 Seo website dành cho dân IT
- 4 REACT NATIVE
- 5 sdfdsf
- 6 Lập trình di động với React Native
- 7 Vue.js
- 8 Kiếm thức cơ bản HTML CSS
- 9 So sánh count() và sizeof() 2 phần tử đếm mảng
- 10 Toán tử và biểu thức của php
0