1、php 自带的加密函数:

1-1、不可逆的加密函数为:md5()、crypt();

md5() 用来计算 MD5 哈稀。语法为:string md5(string str);

crypt() 将字符串用 UNIX 的标准加密 DES 模块加密。这是单向的加密函数,无法解密。欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串。语法为:string crypt(string str, string [salt]);

1-2、可逆转的加密为:base64_encode()、urlencode() 相对应的解密函数:base64_decode() 、urldecode()

base64_encode() 将字符串以 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。语法为string base64_encode(string data); 它的解密函数为:string base64_decode(string encoded_data); 将复回原样。

urlencode() 将字符串以 URL 编码。例如空格就会变成加号。语法为:string urlencode(string str);

它的解密函数为:string urldecode(string str); 将复回原样

2、自定义加密解密方法:

2-1、

function encryptDecrypt($key, $string, $decrypt){   if($decrypt){   $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");   return $decrypted;   }else{   $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));   return $encrypted;   }
}   

加密:echo encryptDecrypt('password', 'Helloweba欢迎您',0);

解密:echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);

2-2、

加密:

function lock_url($txt,$key='www.zhuoyuexiazai.com'){  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";  $nh = rand(0,64);  $ch = $chars[$nh];  $mdKey = md5($key.$ch);  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  $txt = base64_encode($txt);  $tmp = '';  $i=0;$j=0;$k = 0;  for ($i=0; $i<strlen($txt); $i++) {  $k = $k == strlen($mdKey) ? 0 : $k;  $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;  $tmp .= $chars[$j];  }  return urlencode($ch.$tmp);
}  

解密:

function unlock_url($txt,$key='www.zhuoyuexiazai.com'){  $txt = urldecode($txt);  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";  $ch = $txt[0];  $nh = strpos($chars,$ch);  $mdKey = md5($key.$ch);  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  $txt = substr($txt,1);  $tmp = '';  $i=0;$j=0; $k = 0;  for ($i=0; $i<strlen($txt); $i++) {  $k = $k == strlen($mdKey) ? 0 : $k;  $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);  while ($j<0) $j+=64;  $tmp .= $chars[$j];  }  return base64_decode($tmp);
}  

2-3、

加密:

function lock_url($txt,$key='zhuoyuexiazai'){  $txt = $txt.$key;  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";  $nh = rand(0,64);  $ch = $chars[$nh];  $mdKey = md5($key.$ch);  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  $txt = base64_encode($txt);  $tmp = '';  $i=0;$j=0;$k = 0;  for ($i=0; $i<strlen($txt); $i++) {  $k = $k == strlen($mdKey) ? 0 : $k;  $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;  $tmp .= $chars[$j];  }  return urlencode(base64_encode($ch.$tmp));
}  

解密:

function unlock_url($txt,$key='zhuoyuexiazai'){  $txt = base64_decode(urldecode($txt));  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";  $ch = $txt[0];  $nh = strpos($chars,$ch);  $mdKey = md5($key.$ch);  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  $txt = substr($txt,1);  $tmp = '';  $i=0;$j=0; $k = 0;  for ($i=0; $i<strlen($txt); $i++) {  $k = $k == strlen($mdKey) ? 0 : $k;  $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);  while ($j<0) $j+=64;  $tmp .= $chars[$j];  }  return trim(base64_decode($tmp),$key);
}  

2-4、

加密:

function passport_encrypt($txt, $key = 'www.zhuoyuexiazai.com') {   srand((double)microtime() * 1000000);   $encrypt_key = md5(rand(0, 32000));   $ctr = 0;   $tmp = '';   for($i = 0;$i < strlen($txt); $i++) {   $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);   }   return urlencode(base64_encode(passport_key($tmp, $key)));
}   

解密:

function passport_decrypt($txt, $key = 'www.zhuoyuexiazai.com') {   $txt = passport_key(base64_decode(urldecode($txt)), $key);   $tmp = '';   for($i = 0;$i < strlen($txt); $i++) {   $md5 = $txt[$i];   $tmp .= $txt[++$i] ^ $md5;   }   return $tmp;
}   
function passport_key($txt, $encrypt_key) {   $encrypt_key = md5($encrypt_key);   $ctr = 0;   $tmp = '';   for($i = 0; $i < strlen($txt); $i++) {   $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];   }   return $tmp;
} 

案例:

$txt = "1";
$key = "testkey";
$encrypt = passport_encrypt($txt,$key);
$decrypt = passport_decrypt($encrypt,$key);
echo $encrypt."<br>";
echo $decrypt."<br>";

2-5、

//非常给力的authcode加密函数,Discuz!经典代码(带详解)
//函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {     // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙     $ckey_length = 4;     // 密匙     $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);     // 密匙a会参与加解密     $keya = md5(substr($key, 0, 16));     // 密匙b会用来做数据完整性验证     $keyb = md5(substr($key, 16, 16));     // 密匙c用于变化生成的密文     $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';     // 参与运算的密匙     $cryptkey = $keya.md5($keya.$keyc);     $key_length = strlen($cryptkey);     // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),   //解密时会通过这个密匙验证数据完整性     // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确     $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) :  sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;     $string_length = strlen($string);     $result = '';     $box = range(0, 255);     $rndkey = array();     // 产生密匙簿     for($i = 0; $i <= 255; $i++) {     $rndkey[$i] = ord($cryptkey[$i % $key_length]);     }     // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度     for($j = $i = 0; $i < 256; $i++) {     $j = ($j + $box[$i] + $rndkey[$i]) % 256;     $tmp = $box[$i];     $box[$i] = $box[$j];     $box[$j] = $tmp;     }     // 核心加解密部分     for($a = $j = $i = 0; $i < $string_length; $i++) {     $a = ($a + 1) % 256;     $j = ($j + $box[$a]) % 256;     $tmp = $box[$a];     $box[$a] = $box[$j];     $box[$j] = $tmp;     // 从密匙簿得出密匙进行异或,再转成字符     $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));     }     if($operation == 'DECODE') {    // 验证数据有效性,请看未加密明文的格式     if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) &&  substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {     return substr($result, 26);     } else {     return '';     }     } else {     // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因     // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码     return $keyc.str_replace('=', '', base64_encode($result));     }
}
$str = 'abcdef';
$key = 'www.helloweba.com';
echo authcode($str,'ENCODE',$key,0); //加密
$str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';
echo authcode($str,'DECODE',$key,0); //解密 

2-6、

//函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。
function encrypt($string,$operation,$key=''){   $key=md5($key);   $key_length=strlen($key);   $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;   $string_length=strlen($string);   $rndkey=$box=array();   $result='';   for($i=0;$i<=255;$i++){   $rndkey[$i]=ord($key[$i%$key_length]);   $box[$i]=$i;   }   for($j=$i=0;$i<256;$i++){   $j=($j+$box[$i]+$rndkey[$i])%256;   $tmp=$box[$i];   $box[$i]=$box[$j];   $box[$j]=$tmp;   }   for($a=$j=$i=0;$i<$string_length;$i++){   $a=($a+1)%256;   $j=($j+$box[$a])%256;   $tmp=$box[$a];   $box[$a]=$box[$j];   $box[$j]=$tmp;   $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));   }   if($operation=='D'){   if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){   return substr($result,8);   }else{   return'';   }   }else{   return str_replace('=','',base64_encode($result));   }
}
$str = 'abc';
$key = 'www.helloweba.com';
$token = encrypt($str, 'E', $key);
echo '加密:'.encrypt($str, 'E', $key);
echo '解密:'.encrypt($str, 'D', $key);  

php常用的加密解密方法相关推荐

  1. C#常用加密解密方法(MD5加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  2. C#常用加密解密方法(DES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  3. C#常用加密解密方法(AES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  4. ASP.NET(C#)常用数据加密和解密方法汇总

    ASP.NET(C#)常用数据加密和解密方法汇总  一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应用和学 ...

  5. ASP.NET(C#)常用数据加密和解密方法

     ASP.NET(C#)常用数据加密和解密方法汇总  一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应 ...

  6. .NET(C#)常用数据加密和解密方法汇总

    欢迎加入Unity业内qq交流群:956187480 qq扫描二维码加群 一.数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二. 数据加密的项目应用和学习 1.  媒体加密:D ...

  7. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  8. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  9. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

最新文章

  1. Zepto源码分析-架构
  2. 从文件管理到获取洞见,AI 正在彻底变革企业内容管理
  3. 鸟哥的Linux私房菜(基础篇)-第三章、主机规划与磁盘分区(三.4. 重点回顾)
  4. dederss.php美国与,Dede经验:全站rss/连载和分类首页模板替换
  5. 一起学 Java(四) File、Try 、序列化、MySQL、Socket
  6. Blazor带我重玩前端(五)
  7. mysql have_mysql having的用法
  8. 多线程编程中锁的种类与应用举例
  9. Android 比SwipeRefreshLayout更漂亮和强大的下拉刷新控件:Android-MaterialRefreshLayout
  10. 思考问题的一些方法:一般化,特殊化和归纳类比
  11. citrix服务器共享文件夹,如何使用citrix XenApp 发布远程共享文件夹,及其故障解决...
  12. 正方形、长方形、立方体 之二
  13. Tara's Beautiful Permutations 组合数学
  14. oneDrive登陆界面空白 的解决办法
  15. 逆水寒服务器列表文件,逆水寒9月20日服务器合并结果公告一览 逆水寒9.20合服大全有哪些...
  16. 琴生(jensen)不等式
  17. bootstrap—预定义样式风格
  18. Python大屏看板最全教程之Pyecharts图表
  19. 为什么选择Opera而不是火狐
  20. Android存储路径解析

热门文章

  1. Java垃圾回收器(一)新生代垃圾收集器
  2. 开手机私服,服务器配置参考事项
  3. 颠覆传统的X41T详细评测
  4. MIPS 跳转指令BAL vs JAL
  5. 网络协议 终章 - GTP 协议:复杂的移动网络 1
  6. 编写Android Studio插件
  7. python表情库 emoji
  8. 腾讯云远程链接桌面教程 腾讯云桌面远程链接桌面
  9. 正则表达式验证座机号码,手机号等
  10. 视频教程-人工智能-数学基础视频课程-机器学习