`
cakin24
  • 浏览: 1317837 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JavaScript编写MD5加密

阅读更多
一 介绍
MD5是Message-Digest Algorithm 5即信息-摘要算法5,是在计算机语言当中普遍使用的一种杂凑程序,由于类似于函数,这里称为算法。
MD5算法由MD2、MD3和MD4完善而来。它的基本原理是将一个字符串或汉字等,通过使用函数转换为另一种新的字符串,并且这种运算不可逆转。
MD5算法的公开性和安全性,因此被广泛使用在各种程序语言中。
MD5算法已经被各种语言实现。例如ASP、PHP、JAVA、C、C#、VB、VC++、Delpli等语言。
MD5算法以16个32位子分组即512位分组来提供数据杂凑,经过程序流程,生成4个32位数据,最后联合起来成为一个128位散列。
基本方式为:求余、取余、调整长度、与链接变量进行循环运算。
 
二 JavaScript编写MD5加密
本应用使用JavaScript实现了MD5加密算法,在页面文本框中输入需要加密的信息后,单击加密按钮将会弹出通过MD5算法加密后的字符串。
 
三 代码
<script language="javascript"> 
function MD5(sMessage)
{
	function RotateLeft(lValue, iShiftBits)
 	{ 
  		return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits)); 
 	}
	function AddUnsigned(lX,lY)
 	{
		var lX4,lY4,lX8,lY8,lResult;
		lX8 = (lX & 0x80000000);
		lY8 = (lY & 0x80000000);
		lX4 = (lX & 0x40000000);
		lY4 = (lY & 0x40000000);
		lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
		if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
		if (lX4 | lY4)
   		{
   			if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
   			else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
   		}
  		else return (lResult ^ lX8 ^ lY8);
	}
	function F(x,y,z) { return (x & y) | ((~x) & z); }
	function G(x,y,z) { return (x & z) | (y & (~z)); }
	function H(x,y,z) { return (x ^ y ^ z); }
	function I(x,y,z) { return (y ^ (x | (~z))); }
	function FF(a,b,c,d,x,s,ac)
	{
	  a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
	  return AddUnsigned(RotateLeft(a, s), b);
	}
	function GG(a,b,c,d,x,s,ac)
	{
	  a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
	  return AddUnsigned(RotateLeft(a, s), b);
	}
	function HH(a,b,c,d,x,s,ac)
	{
	  a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
	  return AddUnsigned(RotateLeft(a, s), b);
	}
	function II(a,b,c,d,x,s,ac)
	{
	  a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
	  return AddUnsigned(RotateLeft(a, s), b);
	}
	function ConvertToWordArray(sMessage)
	{
	  var lWordCount;
	  var lMessageLength = sMessage.length;
	  var lNumberOfWords_temp1=lMessageLength + 8;
	  var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
	  var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
	  var lWordArray=Array(lNumberOfWords-1);
	  var lBytePosition = 0;
	  var lByteCount = 0;
	  while ( lByteCount < lMessageLength )
	  {
	   lWordCount = (lByteCount-(lByteCount % 4))/4;
	   lBytePosition = (lByteCount % 4)*8;
	   lWordArray[lWordCount] = (lWordArray[lWordCount] | (sMessage.charCodeAt(lByteCount)<<lBytePosition));
	   lByteCount++;
	  }
	  lWordCount = (lByteCount-(lByteCount % 4))/4;
	  lBytePosition = (lByteCount % 4)*8;
	  lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
	  lWordArray[lNumberOfWords-2] = lMessageLength<<3;
	  lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
	  return lWordArray;
	}
	function WordToHex(lValue)
	{
	  var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
	  for (lCount = 0;lCount<=3;lCount++) 
	  {
	   	lByte = (lValue>>>(lCount*8)) & 255;
	   	WordToHexValue_temp = "0" + lByte.toString(16);
	   	WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
	  }
	  return WordToHexValue;
	}
	var x=Array();
	var k,AA,BB,CC,DD,a,b,c,d
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;
	x = ConvertToWordArray(sMessage);
	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
	for (k=0;k<x.length;k+=16)
	{
	    AA=a; BB=b; CC=c; DD=d;
	    a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
	    d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
	    c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
	    b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
	    a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
	    d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
	    c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
	    b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
	    a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
	    d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
	    c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
	    b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
	    a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
	    d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
	    c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
	    b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
	
	    a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
	    d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
	    c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
	    b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
	    a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
	    d=GG(d,a,b,c,x[k+10],S22,0x2441453);
	    c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
	    b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
	    a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
	    d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
	    c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
	    b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
	    a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
	    d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
	    c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
	    b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
	
	    a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
	    d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
	    c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
	    b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
	    a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
	    d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
	    c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
	    b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
	    a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
	    d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
	    c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
	    b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
	    a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
	    d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
	    c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
	    b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
	
	    a=II(a,b,c,d,x[k+0], S41,0xF4292244);
	    d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
	    c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
	    b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
	    a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
	    d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
	    c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
	    b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
	    a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
	    d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
	    c=II(c,d,a,b,x[k+6], S43,0xA3014314);
	    b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
	    a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
	    d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
	    c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
	    b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
	
	    a=AddUnsigned(a,AA); b=AddUnsigned(b,BB); c=AddUnsigned(c,CC); d=AddUnsigned(d,DD);
	}
    var temp= WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
    return temp.toLowerCase();
}
document.write(MD5("hello"));
</script>
 
 
四 运行结果
5d41402abc4b2a76b9719d911017c592

 

3
0
分享到:
评论

相关推荐

    支持中英文字字符混合的md5加密算法(javascript)

    网上找了很多javascript编写的MD5算法,均不支持中文字符,也就是说被散列的字符中含有中文的话,散列后的结果与java或其他语言散列的结果不一样。因此特地上传这个javacript编写的支持中英文字字符混合的md5加密...

    spark-md5-js中通用的md5加密

    Spark-md5是一个用JavaScript编写的快速、高效的md5库。它根据MD5算法,将输入的任意长度的明文,经过一系列的操作,转换成一个128位(16字节)的密文。 Spark-md5实现了在浏览器中对文件进行哈希计算,并且在上传...

    从飞机上接收 ADS-B 无线电信号并将其实时绘制在浏览器中的地图上的应用程序_JavaScript_代码_下载

    一个用 JavaScript 编写的 SDR 应用程序,可以从飞机上接收 ADS-B 无线电信号,并在浏览器的地图上实时绘制它们 效果展示: ... 硬件 该软件需要带有 RTL2832U 芯片的 RTL-SDR USB 加密狗才能运行。...

    forge:使用TLS的本机实现以及用于编写基于加密和网络密集型webapp的工具

    介绍Forge软件是JavaScript中协议的完全本机实现,一组加密实用程序以及用于开发利用许多网络资源的Web Apps的一组工具。性能伪造很快。 可以在这里找到针对其他流行JavaScript密码库的基准: 文献资料API运输工具...

    3desjava源码-haxe-crypto:Hurlant加密库移植到haxe:tls、md2、md5、sha1、sha224、sha256

    JavaScript 源代码的几个衍生作品。 有关更多信息和贡献者列表,请参阅许可证。 用法 haxelib install haxe-crypto 特征 协议:TLS 1.0 支持(部分) 证书:X.509 证书解析和验证,内置根 CA。 公钥加密:RSA(加密/...

    冰翎留言本程序 v2.1.rar

    6.在线修改用户名和密码,不支持直接文件修改,因为数据经过MD5加密 7.显示留言者IP 8.支持输入内容时插入图片 9.显示运行环境 10.大量JavaScript应用,显示页面的PHP文件仅与数据库操作时有运算,其它都以...

    java开源包7

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    适合msscript.ocx使用的crypto-js

    很多语言比如VB 、PB缺少位操作函数,加密和解密编写起来非常困难。有了这个纯Javascript的加密库,就可以通过调用Windows自带的msscript.ocx组件,加载这个库予以...支持aAES,DES,SHA、MD5、RSA、HMAC等应有尽有。

    在线聊天室(ajax+asp)

    普通的ASP、普通的HTML、普通的JavaScript、还有一个普通的程序编写者; 唯有一点----本程序为原创,没有参考任何其他类似程序 --------- 默认管理员和密码都是admin 一、配置 用记事本打开inc文件夹下的conn....

    make-a-replay-in-maj-soul:雀魂自制重构

    欢迎使用雀魂自制重建!...已知的BUG暂无版权声明1.md5加密来自于。 2.recordedit部分参考了B站的 。 3.其他部分均由本人编写。可以使用个人使用,请勿用于商业用途,谢谢配合。请不要将示例代码进行录制并宣传,谢谢。

    GoodProject Maven Webapp.zip

    开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。 jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,...

    java开源包5

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    java开源包4

    用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...

    dirty_thirties

    06.01.2021-14:00 扩展的10.01.2021目标 :star: 用于选择方案并在README.md编写安装说明。 :star: 为了解释为什么,您已经在README.md选择了方案。 :star: 用于不提交未加密到存储库的敏感机密(例如API密钥)。 :...

    gym_management_system

    写一个登录页面,实现登录功能现行的JSP实现和基础数据是没有在创建和修改用户时对密码进行md5码加密的,要求自己加上。把JSP版本下的所有用户管理界面的URL,都管理起来,不能录不能访问,直接跳回登录页面。如果...

    JAVA上百实例源码以及开源项目源代码

    JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器  Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器...

    JAVA上百实例源码以及开源项目

    JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器  Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器...

    35c3-webkid:35C3的WebKid浏览器开发挑战的写作

    35C3CTF-WebKid编写 介绍 自从我想开始使用浏览器以来已经有很长时间了,这个35c3ctf挑战似乎是一个很好的起点。 本文将从完整的初学者的角度撰写。 希望它将帮助人们开始更好地了解一些细微差别。 挑战 可以在CCC...

Global site tag (gtag.js) - Google Analytics