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
您可能感兴趣
- 安装phpstudy注意哪些问题(phpstudy怎么卸载?phpstudy卸载图文教程)
- php简单定时执行任务(php实现 master-worker 守护多进程模式的实例代码)
- php框架创建控制器代码(php连接sftp的作用以及实例代码)
- php扩展安装示例(php扩展开发入门demo示例)
- php 十六进制转换为二进制(PHP实现的62进制转10进制,10进制转62进制函数示例)
- PHP如何安装(PHP使用 Pear 进行安装和卸载包的方法详解)
- 排序算法口诀php(PHP快速排序算法实现的原理及代码详解)
- 微信公众号怎么申请支付接口(微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解)
- phplaravel怎么优化(laravel执行php artisan migrate报错的解决方法)
- php7.4类型属性实例详解(PHP 7.4中使用预加载的方法详解)
- php生成随机数讲解(PHP生成随机字符串实例代码字母+数字)
- phpstudy报错(phpStudy运行帝国备份王出错解决方法)
- thinkphp5如何实现消息队列(thinkPHP5.1框架使用SemanticUI实现分页功能示例)
- php常驻进程(PHP 多进程与信号中断实现多任务常驻内存管理实例方法)
- 在html代码如何添加php代码(php生成HTML文件的类方法)
- php wamp 环境搭建(wamp服务器访问php非常缓慢的解决过程)
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
热门推荐
- ftp服务器怎么搭建linux(Linux下使用vsftp搭建FTP服务器附参数说明)
- python导出数据到mysql(python定时按日期备份MySQL数据并压缩)
- jquery的each的用法
- linux 安装securecrt(Linux SecureCRT显示乱码解决方案)
- hive数值转字符串(hive中将string数据转为bigint的操作)
- laravel数据返回格式(laravel 关联关系遍历数组的例子)
- VS调试时无法命中断点
- 织梦图集怎么设置(织梦不能上传jpg格式怎么办如何解决)
- 云虚拟主机缺点(云虚拟主机未来会怎么发展?)
- HTML5 <figure> 、<figcaption>标签
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9