php代码最可靠的加密方式(php DES加密算法实例分析)
类别:编程学习 浏览量:652
时间:2021-10-20 08:18:02 php代码最可靠的加密方式
php DES加密算法实例分析本文实例讲述了php DES加密算法。分享给大家供大家参考,具体如下:
yii框架的DES代码
|
<?php /** *@see Yii CSecurityManager; */ class Des{ public static function encrypt( $data , $key ){ $module =mcrypt_module_open( 'des' , '' , MCRYPT_MODE_CBC, '' ); $key = substr (md5( $key ),0,mcrypt_enc_get_key_size( $module )); srand(); $iv =mcrypt_create_iv(mcrypt_enc_get_iv_size( $module ), MCRYPT_RAND); mcrypt_generic_init( $module , $key , $iv ); $encrypted = $iv .mcrypt_generic( $module , $data ); mcrypt_generic_deinit( $module ); mcrypt_module_close( $module ); return md5( $data ). '_' . base64_encode ( $encrypted ); } public static function decrypt( $data , $key ){ $_data = explode ( '_' , $data ,2); if ( count ( $_data )<2){ return false; } $data = base64_decode ( $_data [1]); $module =mcrypt_module_open( 'des' , '' , MCRYPT_MODE_CBC, '' ); $key = substr (md5( $key ),0,mcrypt_enc_get_key_size( $module )); $ivSize =mcrypt_enc_get_iv_size( $module ); $iv = substr ( $data ,0, $ivSize ); mcrypt_generic_init( $module , $key , $iv ); $decrypted =mdecrypt_generic( $module , substr ( $data , $ivSize , strlen ( $data ))); mcrypt_generic_deinit( $module ); mcrypt_module_close( $module ); $decrypted = rtrim( $decrypted , "\0" ); if ( $_data [0]!=md5( $decrypted )){ return false; } return $decrypted ; } } |
在网上看到了一篇文章,讲到:
由于PHP使用mcrypt扩展进行3DES加密,填充模式是跟JAVA以及.NET是不一样的,JAVA和.NET填充模式使用的是PKCS7。
所以PHP端必须自定义一个函数对加密字符串进行PKCS7模式补位填充。
另外一点就是双方的KEY注意进行base64编码,最后PHP端经过3DES加密后得到的结果也需要进行base64编码。
以上几点都做好之后,加密结果就一致了。
下面是兼容C#和java的3DES加密的算法
|
<?php class STD3Des { private $key = "" ; private $iv = "" ; /** * 构造,传递二个已经进行base64_encode的KEY与IV * * @param string $key * @param string $iv */ function __construct ( $key , $iv ) { if ( empty ( $key ) || empty ( $iv )) { echo 'key and iv is not valid' ; exit (); } $this ->key = $key ; $this ->iv = $iv ; } /** *加密 * @param <type> $value * @return <type> */ public function encrypt ( $value ) { $td = mcrypt_module_open(MCRYPT_3DES, '' , MCRYPT_MODE_CBC, '' ); $iv = base64_decode ( $this ->iv); $value = $this ->PaddingPKCS7( $value ); $key = base64_decode ( $this ->key); mcrypt_generic_init( $td , $key , $iv ); $ret = base64_encode (mcrypt_generic( $td , $value )); mcrypt_generic_deinit( $td ); mcrypt_module_close( $td ); return $ret ; } /** *解密 * @param <type> $value * @return <type> */ public function decrypt ( $value ) { $td = mcrypt_module_open(MCRYPT_3DES, '' , MCRYPT_MODE_CBC, '' ); $iv = base64_decode ( $this ->iv); $key = base64_decode ( $this ->key); mcrypt_generic_init( $td , $key , $iv ); $ret = trim(mdecrypt_generic( $td , base64_decode ( $value ))); $ret = $this ->UnPaddingPKCS7( $ret ); mcrypt_generic_deinit( $td ); mcrypt_module_close( $td ); return $ret ; } private function PaddingPKCS7 ( $data ) { $block_size = mcrypt_get_block_size( 'tripledes' , 'cbc' ); $padding_char = $block_size - ( strlen ( $data ) % $block_size ); $data .= str_repeat ( chr ( $padding_char ), $padding_char ); return $data ; } private function UnPaddingPKCS7( $text ) { $pad = ord( $text { strlen ( $text ) - 1}); if ( $pad > strlen ( $text )) { return false; } if ( strspn ( $text , chr ( $pad ), strlen ( $text ) - $pad ) != $pad ) { return false; } return substr ( $text , 0, - 1 * $pad ); } } ?> |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/51577321
您可能感兴趣
- thinkphp框架多文件上传完整代码(Thinkphp5 自定义上传文件名的实现方法)
- php验证码实现过程(php伪静态验证码不显示的解决方案)
- mysql5.7.19下载及安装教程(Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法)
- php实用工具(php常用的工具开发整理)
- php守护进程(什么是PHP7中的孤儿进程与僵尸进程)
- phpstudy安装教程详解学习(phpstudy下载安装简明图文教程)
- php使用yield处理并发(Yii2.0框架模型多表关联查询示例)
- php符串使用教程学习(PHP实现支持CURL字符串证书传输的方法)
- php对称算法示例(php解决约瑟夫环算法实例分析)
- 织梦cms漏洞大全(织梦CMS利用php正则让文章的外链自动加nofollow)
- php全栈之路教程(PHP进阶学习之依赖注入与Ioc容器详解)
- linux怎么设置php代码(linux Cron定时执行带参数的PHP代码)
- phpmysql网站开发入门与提高(PHP+MySQL+sphinx+scws实现全文检索功能详解)
- php怎么修改单独一行数据(PHP实现批量修改文件名的方法示例)
- phpstudy服务器怎么设置(PHPStudy打开网页很慢的原因及解决方案)
- php缓存技术学习(简单实用的PHP文本缓存类实例)
- 《囧妈》为何受抵制 春节七部影片撤档背后的责任与博弈(囧妈为何受抵制)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
- 省 市书法家协会 送万福进万家 活动走进禹州美丽乡村(省市书法家协会)
- 点赞 禹州苌庄正式撤乡建镇 未来发展不可估量(禹州苌庄正式撤乡建镇)
- 它荣获 中国生态魅力镇 称号 就在咱们禹州,一起来看看(中国生态魅力镇)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
热门推荐
- Ext.form.FieldSet的用法
- sqlserver实现登录注册(Sqlserver创建用户并授权的实现步骤)
- dedecms织梦阁模板(dedecms英文模板 英文网站程序的选择)
- vue左侧边栏的制作(Vue+Vant实现顶部搜索栏)
- 百度网速买的五分钟加速在哪里(为何用了百度云加速 服务器负载还很大)
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- php集成支付(ThinkPHP框架整合微信支付之刷卡模式图文详解)
- python中怎样使用列表的sort方法(详解python中sort排序使用)
- 怎么对python中列表进行排序(Python列表常见操作详解获取,增加,删除,修改,排序等)
- laravel数据表配置(laravel实现按月或天或小时统计mysql数据的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9