`
cakin24
  • 浏览: 1388856 次
  • 性别: 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
分享到:
评论

相关推荐

    html编写的md5加密

    HTML 编写的 MD5 加密主要涉及到前端JavaScript技术,尤其是jQuery库的应用。MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它能够将任意长度的数据转化为固定长度的128位(16字节)散列值,通常...

    MD5加密就JS文件

    另一种是使用自定义实现的MD5算法,这种情况下你需要理解MD5的算法流程,并手动编写或找到已经实现的JavaScript代码。 在使用MD5加密时需要注意,虽然MD5在很多场合下足够安全,但其存在碰撞攻击的可能,即不同的...

    javascript js 对网页提交内容进行 md5加密 示例

    接下来,你可以编写 JavaScript 代码来使用这个库进行 MD5 加密。以下是一个简单的示例,演示如何对用户输入的内容进行 MD5 加密: ```javascript &lt;!DOCTYPE html&gt; &lt;title&gt;JavaScript MD5加密示例 ...

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

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

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

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

    前段实现MD5加密技术所需js脚本

    - 自定义实现:如果不想引入外部库,可以参考`md5.js`文件,这是一个纯JavaScript编写的MD5实现。通常,这样的实现会遵循MD5算法的步骤,包括预处理、主循环、左旋、异或等操作。 3. **MD5在前端的应用**: - ...

    md5加密算法(JS和C++实现).zip

    在JavaScript中实现MD5,通常可以使用现有的库,如`crypto-js`,这是一个轻量级的加密库,提供了包括MD5在内的多种哈希算法。使用时,只需引入库并调用相应的方法,例如`CryptoJS.MD5("数据")`,即可得到数据的MD5...

    MD5在线加密工具 1.0.zip

    然而,由于其不安全性,即存在碰撞攻击的可能性(两个不同的输入可以产生相同的MD5值),MD5现在主要用作快速校验而非安全加密。 在描述中提到的"MD5在线加密工具 1.0.zip"是一个压缩包,其中包含了版本1.0的MD5...

    MD5.js 前端MD5加密

    标签中的 "js" 指的是 JavaScript,这表明 MD5.js 是使用 JavaScript 编写的。而 "MD5.js" 和 "MD5" 是关键词,表明这个库专注于MD5加密。 在压缩包中,除了 `md5.js` 文件,还有一个名为 `使用说明.txt` 的文本...

    jquery.js和jquery.md5.js进行md5加密

    本篇我们将讨论如何使用jQuery.js和jQuery.md5.js库来实现JavaScript环境下的MD5加密。 **jQuery.js:** jQuery是一个流行的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作和Ajax交互。jQuery通过提供...

    asp-hmac-md5加密方法-md5函数文件-支持中文.rar_asp_asp md5_asp-md5-hmac_md5_中

    在描述中提到的“asp-hmac-md5加密方法-md5函数文件-支持中文”表明这个压缩包可能包含了实现上述过程的ASP函数文件,这些函数文件可能是用VBScript编写的,并且已经处理了中文字符集的问题。在处理中文字符时,需要...

    JAVA工具类(整合,xml,json,MD5,加密解密)

    本资源提供的"JAVA工具类"整合了XML处理、JSON操作、MD5加密以及加解密功能,对提高开发效率大有裨益。 1. **XML处理**: - DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它...

    Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法

    在Kettle中,我们可以通过编写JavaScript代码来调用外部的jar包,实现对文件内容的MD5加密。 首先,你需要下载一个专门用于计算MD5值的jar包,例如在描述中提到的`filemd5hash_jb51.rar`,这个包包含了用于计算MD5...

    哈客部落MD5加密解密API接口.7z

    3. **编写调用代码**:根据API文档,使用合适的编程语言(如Python、Java、JavaScript等)编写调用接口的代码。这通常涉及到发送HTTP请求,携带必要的参数,并处理返回的响应。 4. **加密与解密过程**:对于MD5加密...

    springboot+Thymeleaf+MD5加密前后端分离,米尚商城项目,可用于(毕业设计).zip

    该项目是基于SpringBoot和Thymeleaf开发的一个前端与后端分离的米尚商城系统,同时结合了MD5加密技术,适用于毕业设计或类似的项目实践。让我们深入了解一下这个项目所涉及的技术栈及其重要性。 首先,SpringBoot是...

    JS_MD5示例

    "源码"标签暗示我们将深入到实际的代码实现中,了解如何在JavaScript中编写或使用MD5函数。一个常见的库是`crypto-js`,它提供了多种哈希函数,包括MD5。以下是一个简单的使用`crypto-js`库进行MD5加密的示例: ```...

    VB6.0 RSA/AES/Md5/Base64加密 解密 微信小程序 javascript 通用

    标题中的“VB6.0 RSA/AES/Md5/Base64加密 解密 微信小程序 javascript 通用”表明这是一个关于编程的示例项目,主要涵盖了四种加密和解密技术:RSA、AES、MD5和Base64。这些技术在信息安全领域广泛应用于数据保护和...

    浅谈如何通过node.js对数据进行MD5加密

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript编写服务器端程序。Node.js由于其异步非阻塞I/O的特性,非常适合构建高性能的网络应用。 在Node.js中进行MD5加密可以使用第三方库...

    jQuery简单实现MD5加密的方法

    本文将介绍如何使用jQuery和jquery.md5.js插件来实现MD5加密功能,这为不熟悉原生JavaScript加密函数的开发者提供了一个简洁的解决方案。 首先,要实现MD5加密功能,需要在页面中引入jQuery库和jquery.md5.js插件。...

    MD5站源码

    MD5站源码通常指的是一个专门用于MD5哈希计算的网站的源代码。MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值,通常用32个十六进制数字表示。在网络安全领域...

Global site tag (gtag.js) - Google Analytics