destools php_php DES加密算法实例分析
本文实例讲述了php DES加密算法。分享给大家供大家参考,具体如下:
yii框架的DES代码
/**
*@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加密的算法
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 $value
* @return
*/
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 $value
* @return
*/
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);
}
}
?>
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://tools.jb51.net/password/hash_md5_sha
希望本文所述对大家PHP程序设计有所帮助。
destools php_php DES加密算法实例分析相关推荐
- SSL/TLS 协议简介与实例分析
作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...
- DES加密算法安全吗,有哪些优点和缺点?
在密码学中,DES算法是一种常见的分组加密算法,它是应用最为广泛的对称加密算法.加密算法有很多种,DES算法只是其中的一种,那么DES加密算法安全吗?DES加密算法有哪些优点和缺点?下面本文将对这些问 ...
- 实验一 DES加密算法编程实现
华南理工大学 软件学院 陈春华 (博士) chunhuachen@scut.edu.cn 一. 实验目的 通过使用DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练掌握DES 算 ...
- 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码
文章目录 1.什么是DES 2.DES的基本概念 3.DES的加密流程 4.DES算法步骤详解 4.1 初始置换(Initial Permutation,IP置换) 4.2 加密轮次 4.3 F轮函数 ...
- 民生银行直销银行手机登陆加密算法的分析
民生银行直销银行手机登陆加密算法的分析 引言 环境的设置 认证加密算法分析 总结 引言 日常工作中,正好碰到针对银行类系统的安全测试工作,通过Burp抓包发现传输的信息都是一串加密的数据,因此,就针对 ...
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- sm2加密算法实例_实例说明加密算法
sm2加密算法实例 Cryptography, at its most basic, is the science of using codes and ciphers to protect mess ...
最新文章
- Java项目:前台+后台精品图书管理系统(java+SSM+jsp+mysql+maven)
- 开源自动机器学习(AutoML)框架盘点
- Biopython-Chapter3.生物序列对象
- 【AR】Vuforia之unity3d 开发环境搭建
- ccombox获取选择的文本_PC端最好用的翻译软件,支持引擎切换、文本朗读
- PHP版本如何选择?应该使用哪个版本?
- Apache的RewriteRule规则详细介绍
- 用户画像标签维度_一文看懂用户画像标签体系(包括维度、应用场景)
- 动态链接库的隐式动态链接和显示动态链接
- windows上telnet用法 测试端口号
- c++ 链表_Thinking--从尾到头打印链表
- python中的深拷贝和浅拷贝
- Java经典实例:在正则表达式中控制大小写
- 使用sed在文件中定位文本的方式
- mac系统我的世界服务器,我的世界Mac版联机教程
- 1941. Scary Martian Word
- VINS-Mono 代码解析六、边缘化(2)理论和代码详解
- 【MySQL练习案例】
- PTAL1-087机工士姆斯塔迪奥
- K8s实战一:基本概念与命令二
热门文章
- 查看工作组计算机没有服务器,计算机相关:网上邻居问题:当前工作组的服务器列表无法使用...
- mri计算机系统,MRI设备
- Java:实现文件批量导入导出实践(兼容xls,xlsx)
- Spring AOP中的前置通知和后置通知详解
- 成功修复2G金士顿U盘
- leetcode题解131-分割回文串
- leetcode190-颠倒二进制位
- WPFのDecorator 、Adorner和AdornerDecorator
- linux 有趣的命令
- [C++ Primer] 第2章: 变量