md5不是加密算法(md5是不是常用的数据加密算法)

2023-02-28 6:50:03 密语知识 思思

谁给我讲讲MD5的加密方法,还有为什么不可以反MD5?

MD5算法最基本的原理就是一个方程的解的原理!假设给定一个方程f(x),通过对自变量x的赋值,可以得到因变量f(x)的值(举个例子f(x)=2x+1,令x=1,则f(x)=3)!小学的解方程,就是这个的逆运用!从理论上来说,一直f(x)的表达式,以及f(x)的值,完全可以解出x(比如f(x)=2x+1,f(x)=3,则通过解一个一元一次方程,可以得出x=1)!但是,实际上,并不是每个方程都能得到准确解得!比如f(x)是一个指数函数,我们只能解出对数,得不出准确的实数解,这时,我们就是这个函数的求解是困难的!MD5的基本原理就是这样,MD5是用来进行身份认证而设计的,因此,我们不需要MD5能够通过密文得出明文!因此,MD5从理论上来说还是不可以逆解的!但是,事实上,王小云博士已经发现了破解办法——差分攻击,但是此办法需要满足290个充要条件,经过王小云博士的研究,已经减少到70个充要条件!但仍是天文数字!现在网上流传的破解,从本质上来说,都是“暴力破解”,也就所有加密算法都通用的!这个办法,很慢,而且完全是看概率的!

对于MD5就先讲这么多,想知道具体的算法流程,请加我

无法解密的加密算法-MD5

MD5是一种单向的加密算法,本身会丢失原始信息,并不能用于数据传输的加解密,在网络通信中却有一席之地,如 微信支付 中用于签名算法。

无论输入数据大小,输出总是128位的信息,一般用16进制显示。

这个概率有多小,形象的描述是“比连续中500万年500万大奖的概率还小”,相当于几十亿台电脑中有几十亿个文件,才有可能相同,一般的数据表完全不用考虑这个问题。

MD5是单向算法,无法获得原始值,但现在有解密平台保留了很多常见值的加密值,当量到一定范围时,相当于可以从MD5查询出原值。

利用MD5的特性2和3,在网络传输中,将接收到的数据做MD5运算,如果MD5值不匹配,则认为数据被篡改。

利用MD5的稳定性和分散性,可以在数组结构中获得一张“平衡”的表,以加快查找数据的速度。

调用

MD5算法只是哈希算法中的一种,常见的还有 MD4,SHA-0, SHA-1,SHA-2。在安全要求更高的场景中,推荐SHA-2算法。

用jQuery.md5.js加密密码后后台怎么解密?

MD5不是加密算法,它是Hash算法,所以它不可逆,也没法还原成原文。

你可以用base64、异或或者aes des等加密算法去实现。

1、base64加密

在页面中引入base64.js文件,调用方法为:

?

123456789101112131415161718

!DOCTYPE HTMLhtmlheadmeta charset="utf-8"titlebase64加密/titlescript type="text/javascript" src="base64.js"/scriptscript type="text/javascript"  var b = new Base64();  var str = b.encode("admin:admin");  alert("base64 encode:" + str);//解密  str = b.decode(str);  alert("base64 decode:" + str);/script/headbody/body/html

2、md5加密

在页面中引用md5.js文件,调用方法为

?

1234567891011121314

!DOCTYPE HTMLhtmlheadmeta charset="utf-8"titlemd5加密/titlescript type="text/ecmascript" src="md5.js"/scriptscript type="text/javascript" var hash = hex_md5("123dafd"); alert(hash)/script/headbody/body/html

3、sha1加密

据说这是最安全的加密

页面中引入sha1.js,调用方法为

?

1234567891011121314

!DOCTYPE HTMLhtmlheadmeta charset="utf-8"titlesha1加密/titlescript type="text/ecmascript" src="sha1.js"/scriptscript type="text/javascript" var sha = hex_sha1('mima123465') alert(sha)/script/headbody/body/html

一下为js们的源代码

base64.js:

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106

/**** Base64 encode / decode** @author haitao.tu* @date 2010-04-26* @email tuhaitao@foxmail.com**/function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) {  var output = "";  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  var i = 0;  input = _utf8_encode(input);  while (i input.length) {   chr1 = input.charCodeAt(i++);   chr2 = input.charCodeAt(i++);   chr3 = input.charCodeAt(i++);   enc1 = chr1 2;   enc2 = ((chr1 3) 4) | (chr2 4);   enc3 = ((chr2 15) 2) | (chr3 6);   enc4 = chr3 63;   if (isNaN(chr2)) {    enc3 = enc4 = 64;   } else if (isNaN(chr3)) {    enc4 = 64;   }   output = output +   _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +   _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  }  return output; } // public method for decoding this.decode = function (input) {  var output = "";  var chr1, chr2, chr3;  var enc1, enc2, enc3, enc4;  var i = 0;  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  while (i input.length) {   enc1 = _keyStr.indexOf(input.charAt(i++));   enc2 = _keyStr.indexOf(input.charAt(i++));   enc3 = _keyStr.indexOf(input.charAt(i++));   enc4 = _keyStr.indexOf(input.charAt(i++));   chr1 = (enc1 2) | (enc2 4);   chr2 = ((enc2 15) 4) | (enc3 2);   chr3 = ((enc3 3) 6) | enc4;   output = output + String.fromCharCode(chr1);   if (enc3 != 64) {    output = output + String.fromCharCode(chr2);   }   if (enc4 != 64) {    output = output + String.fromCharCode(chr3);   }  }  output = _utf8_decode(output);  return output; } // private method for UTF-8 encoding _utf8_encode = function (string) {  string = string.replace(/\r\n/g,"\n");  var utftext = "";  for (var n = 0; n string.length; n++) {   var c = string.charCodeAt(n);   if (c 128) {    utftext += String.fromCharCode(c);   } else if((c 127) (c 2048)) {    utftext += String.fromCharCode((c 6) | 192);    utftext += String.fromCharCode((c 63) | 128);   } else {    utftext += String.fromCharCode((c 12) | 224);    utftext += String.fromCharCode(((c 6) 63) | 128);    utftext += String.fromCharCode((c 63) | 128);   }  }  return utftext; } // private method for UTF-8 decoding _utf8_decode = function (utftext) {  var string = "";  var i = 0;  var c = c1 = c2 = 0;  while ( i utftext.length ) {   c = utftext.charCodeAt(i);   if (c 128) {    string += String.fromCharCode(c);    i++;   } else if((c 191) (c 224)) {    c2 = utftext.charCodeAt(i+1);    string += String.fromCharCode(((c 31) 6) | (c2 63));    i += 2;   } else {    c2 = utftext.charCodeAt(i+1);    c3 = utftext.charCodeAt(i+2);    string += String.fromCharCode(((c 15) 12) | ((c2 63) 6) | (c3 63));    i += 3;   }  }  return string; }}

md5不是加密算法(md5是不是常用的数据加密算法) 第1张

MD5是加密算法,还是校验文件的算法?

校验算法, 因为是通过 hash 实现的, 所以丢失了信息,单向的函数,不能恢复到原来的值,加密能解密的。