本文实例讲述了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加密算法实例分析相关推荐

  1. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

  2. DES加密算法安全吗,有哪些优点和缺点?

    在密码学中,DES算法是一种常见的分组加密算法,它是应用最为广泛的对称加密算法.加密算法有很多种,DES算法只是其中的一种,那么DES加密算法安全吗?DES加密算法有哪些优点和缺点?下面本文将对这些问 ...

  3. 实验一 DES加密算法编程实现

    华南理工大学 软件学院 陈春华 (博士) chunhuachen@scut.edu.cn 一. 实验目的 通过使用DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练掌握DES 算 ...

  4. 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

    文章目录 1.什么是DES 2.DES的基本概念 3.DES的加密流程 4.DES算法步骤详解 4.1 初始置换(Initial Permutation,IP置换) 4.2 加密轮次 4.3 F轮函数 ...

  5. 民生银行直销银行手机登陆加密算法的分析

    民生银行直销银行手机登陆加密算法的分析 引言 环境的设置 认证加密算法分析 总结 引言 日常工作中,正好碰到针对银行类系统的安全测试工作,通过Burp抓包发现传输的信息都是一串加密的数据,因此,就针对 ...

  6. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  7. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟

    PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...

  8. RPC-原理及RPC实例分析

    还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...

  9. sm2加密算法实例_实例说明加密算法

    sm2加密算法实例 Cryptography, at its most basic, is the science of using codes and ciphers to protect mess ...

最新文章

  1. Java项目:前台+后台精品图书管理系统(java+SSM+jsp+mysql+maven)
  2. 开源自动机器学习(AutoML)框架盘点
  3. Biopython-Chapter3.生物序列对象
  4. 【AR】Vuforia之unity3d 开发环境搭建
  5. ccombox获取选择的文本_PC端最好用的翻译软件,支持引擎切换、文本朗读
  6. PHP版本如何选择?应该使用哪个版本?
  7. Apache的RewriteRule规则详细介绍
  8. 用户画像标签维度_一文看懂用户画像标签体系(包括维度、应用场景)
  9. 动态链接库的隐式动态链接和显示动态链接
  10. windows上telnet用法 测试端口号
  11. c++ 链表_Thinking--从尾到头打印链表
  12. python中的深拷贝和浅拷贝
  13. Java经典实例:在正则表达式中控制大小写
  14. 使用sed在文件中定位文本的方式
  15. mac系统我的世界服务器,我的世界Mac版联机教程
  16. 1941. Scary Martian Word
  17. VINS-Mono 代码解析六、边缘化(2)理论和代码详解
  18. 【MySQL练习案例】
  19. PTAL1-087机工士姆斯塔迪奥
  20. K8s实战一:基本概念与命令二

热门文章

  1. 查看工作组计算机没有服务器,计算机相关:网上邻居问题:当前工作组的服务器列表无法使用...
  2. mri计算机系统,MRI设备
  3. Java:实现文件批量导入导出实践(兼容xls,xlsx)
  4. Spring AOP中的前置通知和后置通知详解
  5. 成功修复2G金士顿U盘
  6. leetcode题解131-分割回文串
  7. leetcode190-颠倒二进制位
  8. WPFのDecorator 、Adorner和AdornerDecorator
  9. linux 有趣的命令
  10. [C++ Primer] 第2章: 变量