0

0

用PHP写的MD5加密函数_PHP

php中文网

php中文网

发布时间:2016-06-01 12:34:53

|

1153人浏览过

|

来源于php中文网

原创

用PHP写的MD5加密函数

//php_md5("字符串")
define("bits_to_a_byte",8);
define("bytes_to_a_word",4);
define("bits_to_a_word",32);
$m_lonbits=array(30);
$m_l2power=array(30);

function lshift($lvalue,$ishiftbits)
{
        if ($ishiftbits==0) return $lvalue;
        if ($ishiftbits==31)
        {
                if ($lvalue&1) { return 0x80000000; }
                else { return 0; }
        }
        if ($ishiftbits 31) { }
        if (($lvalue&$globals[31-$ishiftbits]))
        {        $tmpstr=(($lvalue&$globals[31-($ishiftbits+1)])*$globals[$ishiftbits])|0x80000000; }
        else
        { $tmpstr=(($lvalue&$globals[31-$ishiftbits])*$globals[$ishiftbits]); }
        return $tmpstr;
}

function rshift($lvalue,$ishiftbits)
{
        if ($ishiftbits==0)return $lvalue;
        if ($ishiftbits==31)
        {
                if ($lvalue&0x80000000) { return 1; }
                else { return 0; }
        }
        if ($ishiftbits31) { }
        $tmpstr=floor(($lvalue&0x7ffffffe)/$globals[$ishiftbits]);
        if ($lvalue&0x80000000) { $tmpstr=$tmpstr|floor(0x40000000/$globals[$ishiftbits-1]); }
        return $tmpstr;
}

function rotateleft($lvalue,$ishiftbits)
{
        return lshift($lvalue,$ishiftbits)|rshift($lvalue,(32-$ishiftbits));
}

function addunsigned($lx,$ly)
{
        $lx8=$lx&0x80000000;
        $ly8=$ly&0x80000000;
        $lx4=$lx&0x40000000;
        $ly4=$ly&0x40000000;
        $lresult=($lx&0x3fffffff)+($ly&0x3fffffff);

        if ($lx4&$ly4) { $lresult=$lresult^0x80000000^$lx8^$ly8; }
        if ($lx4|$ly4)
        {
                if ($lresult&0x40000000)
                { $lresult=$lresult^0xc0000000^$lx8^$ly8; }
                else
                { $lresult=$lresult^0x40000000^$lx8^$ly8; }
        }
        else
        { $lresult=$lresult^$lx8^$ly8; }
        return $lresult;
}

function md5_f($x,$y,$z)
{
        return ($x&$y)|((~$x)&$z);
}

function md5_g($x,$y,$z)
{
        return ($x&$z)|($y&(~$z));
}

function md5_h($x,$y,$z)
{
        return ($x^$y^$z);
}

function md5_i($x,$y,$z)
{
        return ($y^($x|(~$z)));
}

function md5_ff(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=addunsigned($a,addunsigned(addunsigned(md5_f($b,$c,$d),$x),$ac));
        $a=rotateleft($a,$s);
        $a=addunsigned($a,$b);
}

function md5_gg(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=addunsigned($a,addunsigned(addunsigned(md5_g($b,$c,$d),$x),$ac));
        $a=rotateleft($a,$s);
        $a=addunsigned($a,$b);
}

function md5_hh(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=addunsigned($a,addunsigned(addunsigned(md5_h($b,$c,$d),$x),$ac));
        $a=rotateleft($a,$s);
        $a=addunsigned($a,$b);
}

function md5_ii(&$a,$b,$c,$d,$x,$s,$ac)
{
        $a=addunsigned($a,addunsigned(addunsigned(md5_i($b,$c,$d),$x),$ac));
        $a=rotateleft($a,$s);
        $a=addunsigned($a,$b);
}

function converttowordarray($smessage)
{
        $lwordarray=array();
        $modulus_bits=512;
        $congruent_bits=448;
        $lmessagelength=strlen($smessage);
        $lnumberofwords=(floor(($lmessagelength+floor(($modulus_bits-$congruent_bits)/bits_to_a_byte))/floor($modulus_bits/bits_to_a_byte))+1)*floor($modulus_bits/bits_to_a_word);
        $lbyteposition=0;
        $lbytecount=0;
        while(!($lbytecount>=$lmessagelength))
        {
                $lwordcount=floor($lbytecount/bytes_to_a_word);
                $lbyteposition=($lbytecount%bytes_to_a_word)*bits_to_a_byte;
                $lwordarray[$lwordcount]=$lwordarray[$lwordcount]|lshift(ord(substr($smessage,$lbytecount+1-1,1)),$lbyteposition);
                $lbytecount=$lbytecount+1;
        }
        $lwordcount=floor($lbytecount/bytes_to_a_word);
        $lbyteposition=($lbytecount%bytes_to_a_word)*bits_to_a_byte;
        $lwordarray[$lwordcount]=$lwordarray[$lwordcount]|lshift(0x80,$lbyteposition);
        $lwordarray[$lnumberofwords-2]=lshift($lmessagelength,3);
        $lwordarray[$lnumberofwords-1]=rshift($lmessagelength,29);
        return $lwordarray;
}

function wordtohex($lvalue)
{
        $tmpstr="";
        for ($lcount=0; $lcount        {
                $lbyte=rshift($lvalue,$lcount*bits_to_a_byte)&$globals[bits_to_a_byte-1];
                $tmpstr=$tmpstr.(substr("0".dechex($lbyte),strlen("0".dechex($lbyte))-2));//这行可能有问题
        }
        return $tmpstr;
}
function php_md5($smessage)
{
        $globals[0]=intval(1);
        $globals[1]=intval(3);
        $globals[2]=intval(7);
        $globals[3]=intval(15);
        $globals[4]=intval(31);
        $globals[5]=intval(63);
        $globals[6]=intval(127);
        $globals[7]=intval(255);
        $globals[8]=intval(511);
        $globals[9]=intval(1023);
        $globals[10]=intval(2047);
        $globals[11]=intval(4095);
        $globals[12]=intval(8191);
        $globals[13]=intval(16383);
        $globals[14]=intval(32767);
        $globals[15]=intval(65535);
        $globals[16]=intval(131071);
        $globals[17]=intval(262143);
        $globals[18]=intval(524287);
        $globals[19]=intval(1048575);
        $globals[20]=intval(2097151);
        $globals[21]=intval(4194303);
        $globals[22]=intval(8388607);
        $globals[23]=intval(16777215);
        $globals[24]=intval(33554431);
        $globals[25]=intval(67108863);
        $globals[26]=intval(134217727);
        $globals[27]=intval(268435455);
        $globals[28]=intval(536870911);
        $globals[29]=intval(1073741823);
        $globals[30]=intval(2147483647);

        $globals[0]=intval(1);
        $globals[1]=intval(2);
        $globals[2]=intval(4);
        $globals[3]=intval(8);
        $globals[4]=intval(16);
        $globals[5]=intval(32);
        $globals[6]=intval(64);
        $globals[7]=intval(128);
        $globals[8]=intval(256);
        $globals[9]=intval(512);
        $globals[10]=intval(1024);
        $globals[11]=intval(2048);
        $globals[12]=intval(4096);
        $globals[13]=intval(8192);
        $globals[14]=intval(16384);
        $globals[15]=intval(32768);
        $globals[16]=intval(65536);
        $globals[17]=intval(131072);
        $globals[18]=intval(262144);
        $globals[19]=intval(524288);
        $globals[20]=intval(1048576);
        $globals[21]=intval(2097152);
        $globals[22]=intval(4194304);
        $globals[23]=intval(8388608);
        $globals[24]=intval(16777216);
        $globals[25]=intval(33554432);
        $globals[26]=intval(67108864);
        $globals[27]=intval(134217728);
        $globals[28]=intval(268435456);
        $globals[29]=intval(536870912);
        $globals[30]=intval(1073741824);

        $s11=7;
        $s12=12;
        $s13=17;
        $s14=22;
        $s21=5;
        $s22=9;
        $s23=14;
        $s24=20;
        $s31=4;
        $s32=11;
        $s33=16;
        $s34=23;
        $s41=6;
        $s42=10;
        $s43=15;
        $s44=21;

        $x=converttowordarray($smessage);

        $a=0x67452301;
        $b=0xefcdab89;
        $c=0x98badcfe;
        $d=0x10325476;

        for ($k=0; $k        {
                $aa=$a;
                $bb=$b;
                $cc=$c;
                $dd=$d;
                md5_ff($a,$b,$c,$d,$x[$k+0],$s11,0xd76aa478);
        md5_ff($d,$a,$b,$c,$x[$k+1],$s12,0xe8c7b756);
        md5_ff($c,$d,$a,$b,$x[$k+2],$s13,0x242070db);
        md5_ff($b,$c,$d,$a,$x[$k+3],$s14,0xc1bdceee);
        md5_ff($a,$b,$c,$d,$x[$k+4],$s11,0xf57c0faf);
        md5_ff($d,$a,$b,$c,$x[$k+5],$s12,0x4787c62a);
        md5_ff($c,$d,$a,$b,$x[$k+6],$s13,0xa8304613);
        md5_ff($b,$c,$d,$a,$x[$k+7],$s14,0xfd469501);
        md5_ff($a,$b,$c,$d,$x[$k+8],$s11,0x698098d8);
        md5_ff($d,$a,$b,$c,$x[$k+9],$s12,0x8b44f7af);
        md5_ff($c,$d,$a,$b,$x[$k+10],$s13,0xffff5bb1);
        md5_ff($b,$c,$d,$a,$x[$k+11],$s14,0x895cd7be);
        md5_ff($a,$b,$c,$d,$x[$k+12],$s11,0x6b901122);
        md5_ff($d,$a,$b,$c,$x[$k+13],$s12,0xfd987193);
        md5_ff($c,$d,$a,$b,$x[$k+14],$s13,0xa679438e);
        md5_ff($b,$c,$d,$a,$x[$k+15],$s14,0x49b40821);

        md5_gg($a,$b,$c,$d,$x[$k+1],$s21,0xf61e2562);
        md5_gg($d,$a,$b,$c,$x[$k+6],$s22,0xc040b340);
        md5_gg($c,$d,$a,$b,$x[$k+11],$s23,0x265e5a51);
        md5_gg($b,$c,$d,$a,$x[$k+0],$s24,0xe9b6c7aa);
        md5_gg($a,$b,$c,$d,$x[$k+5],$s21,0xd62f105d);
        md5_gg($d,$a,$b,$c,$x[$k+10],$s22,0x2441453);
        md5_gg($c,$d,$a,$b,$x[$k+15],$s23,0xd8a1e681);
        md5_gg($b,$c,$d,$a,$x[$k+4],$s24,0xe7d3fbc8);
        md5_gg($a,$b,$c,$d,$x[$k+9],$s21,0x21e1cde6);
        md5_gg($d,$a,$b,$c,$x[$k+14],$s22,0xc33707d6);
        md5_gg($c,$d,$a,$b,$x[$k+3],$s23,0xf4d50d87);
        md5_gg($b,$c,$d,$a,$x[$k+8],$s24,0x455a14ed);
        md5_gg($a,$b,$c,$d,$x[$k+13],$s21,0xa9e3e905);
        md5_gg($d,$a,$b,$c,$x[$k+2],$s22,0xfcefa3f8);
        md5_gg($c,$d,$a,$b,$x[$k+7],$s23,0x676f02d9);
        md5_gg($b,$c,$d,$a,$x[$k+12],$s24,0x8d2a4c8a);

        md5_hh($a,$b,$c,$d,$x[$k+5],$s31,0xfffa3942);
        md5_hh($d,$a,$b,$c,$x[$k+8],$s32,0x8771f681);
        md5_hh($c,$d,$a,$b,$x[$k+11],$s33,0x6d9d6122);
        md5_hh($b,$c,$d,$a,$x[$k+14],$s34,0xfde5380c);
        md5_hh($a,$b,$c,$d,$x[$k+1],$s31,0xa4beea44);
        md5_hh($d,$a,$b,$c,$x[$k+4],$s32,0x4bdecfa9);
        md5_hh($c,$d,$a,$b,$x[$k+7],$s33,0xf6bb4b60);
        md5_hh($b,$c,$d,$a,$x[$k+10],$s34,0xbebfbc70);
        md5_hh($a,$b,$c,$d,$x[$k+13],$s31,0x289b7ec6);
        md5_hh($d,$a,$b,$c,$x[$k+0],$s32,0xeaa127fa);
        md5_hh($c,$d,$a,$b,$x[$k+3],$s33,0xd4ef3085);
        md5_hh($b,$c,$d,$a,$x[$k+6],$s34,0x4881d05);
        md5_hh($a,$b,$c,$d,$x[$k+9],$s31,0xd9d4d039);
        md5_hh($d,$a,$b,$c,$x[$k+12],$s32,0xe6db99e5);
        md5_hh($c,$d,$a,$b,$x[$k+15],$s33,0x1fa27cf8);
        md5_hh($b,$c,$d,$a,$x[$k+2],$s34,0xc4ac5665);

        md5_ii($a,$b,$c,$d,$x[$k+0],$s41,0xf4292244);
        md5_ii($d,$a,$b,$c,$x[$k+7],$s42,0x432aff97);
        md5_ii($c,$d,$a,$b,$x[$k+14],$s43,0xab9423a7);
        md5_ii($b,$c,$d,$a,$x[$k+5],$s44,0xfc93a039);
        md5_ii($a,$b,$c,$d,$x[$k+12],$s41,0x655b59c3);
        md5_ii($d,$a,$b,$c,$x[$k+3],$s42,0x8f0ccc92);
        md5_ii($c,$d,$a,$b,$x[$k+10],$s43,0xffeff47d);
        md5_ii($b,$c,$d,$a,$x[$k+1],$s44,0x85845dd1);
        md5_ii($a,$b,$c,$d,$x[$k+8],$s41,0x6fa87e4f);
        md5_ii($d,$a,$b,$c,$x[$k+15],$s42,0xfe2ce6e0);
        md5_ii($c,$d,$a,$b,$x[$k+6],$s43,0xa3014314);
        md5_ii($b,$c,$d,$a,$x[$k+13],$s44,0x4e0811a1);
        md5_ii($a,$b,$c,$d,$x[$k+4],$s41,0xf7537e82);
        md5_ii($d,$a,$b,$c,$x[$k+11],$s42,0xbd3af235);
        md5_ii($c,$d,$a,$b,$x[$k+2],$s43,0x2ad7d2bb);
        md5_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);
        }
        return strtolower(wordtohex($a).wordtohex($b).wordtohex($c).wordtohex($d));
}

$aaa=php_md5("sdfasdf");
echo $aaa;

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.4万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

Excel 教程
Excel 教程

共162课时 | 18.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号