test.php测试文件

  1. <?php
  2. require_once('Des.php');
  3.  
  4. $des = new Des();
  5.  
  6. $data['a'] = 'a';
  7. $data['b'] = 'b';
  8.  
  9. $conf = ['appkey'=>'AbcdefghijklmnopqrstuvwX','secretcode'=>'Abcdefgh'];
  10.  
  11. $encode = $des->encode($data, $conf);
  12.  
  13. print_r($encode);
  14. echo "<br>";
  15.  
  16. $decode = $des->decode($encode,$conf);
  17.  
  18. print_r($decode);
  19.  
  20. ?>

Des.php

  1. <?php
  2.  
  3. require_once('TripleDES.php');
  4.  
  5. class Des {
  6.  
  7. public static function encode($data, $configKey) {
  8. $tripleDes = new TripleDES();
  9. if (is_array($data)) {
  10. $data = json_encode($data);
  11. }
  12. return $tripleDes->encode($data, $configKey["appkey"], $configKey["secretcode"]);
  13. }
  14.  
  15. public static function decode($data, $configKey) {
  16. $tripleDes = new TripleDES();
  17. return $tripleDes->decode($data, $configKey["appkey"], $configKey["secretcode"]);
  18. }
  19.  
  20. public static function encodeArr($data, $configKey) {
  21. $data = json_encode($data);
  22. return self::encode($data, $configKey);
  23. }
  24.  
  25. public static function decodeArr($data, $configKey) {
  26. $res = self::decode($data, $configKey);
  27. return json_decode($res,true);
  28. }
  29.  
  30. }

TripleDES.php

  1. <?php
  2.  
  3. class TripleDES {
  4.  
  5. public static function genIvParameter() {
  6. return mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CBC), MCRYPT_RAND);
  7. }
  8.  
  9. private static function pkcs5Pad($text, $blocksize) {
  10. $pad = $blocksize - (strlen($text) % $blocksize); // in php, strlen returns the bytes of $text
  11. return $text . str_repeat(chr($pad), $pad);
  12. }
  13.  
  14. private static function pkcs5Unpad($text) {
  15. $pad = ord($text{strlen($text) - 1});
  16. if ($pad > strlen($text))
  17. return false;
  18. if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
  19. return false;
  20. return substr($text, 0, -1 * $pad);
  21. }
  22.  
  23. public static function encryptText($plain_text, $key, $iv) {
  24. $padded = TripleDES::pkcs5Pad($plain_text, mcrypt_get_block_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CBC));
  25. return mcrypt_encrypt(MCRYPT_TRIPLEDES, $key, $padded, MCRYPT_MODE_CBC, $iv);
  26. }
  27.  
  28. public static function decryptText($cipher_text, $key, $iv) {
  29. if(function_exists('mcrypt_decrypt')){
  30. $plain_text = mcrypt_decrypt(MCRYPT_TRIPLEDES, $key, $cipher_text, MCRYPT_MODE_CBC, $iv);
  31. }else{
  32. $plain_text = openssl_decrypt($cipher_text, 'DES-EDE3-CBC',$key, OPENSSL_NO_PADDING,$iv);
  33. }
  34. return TripleDES::pkcs5Unpad($plain_text);
  35. }
  36.  
  37. public static function decode($cipher_text, $key, $iv) {
  38. $cipher_text = base64_decode($cipher_text);
  39. $cipher_text = TripleDES::decryptText($cipher_text, $key, $iv);
  40. return $cipher_text;
  41. }
  42.  
  43. public static function encode($cipher_text, $key, $iv) {
  44. $cipher_text = TripleDES::encryptText($cipher_text, $key, $iv);
  45. return base64_encode($cipher_text);
  46. }
  47.  
  48. }

PHP DES加解密的更多相关文章

  1. Node.js的DES加解密和MD5加密

    最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {        var _encrymd5 = require('crypto').createHas ...

  2. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  3. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  4. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  5. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  6. JavaScript与C#互通的DES加解密算法

    原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DE ...

  7. PHP 基础篇 - PHP 中 DES 加解密详解

    一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对 ...

  8. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  9. javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通

    我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...

  10. JavaScript与C#互通的DES加解密算法的实现(转)

    本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密 ...

随机推荐

  1. Flutter Stack布局中定位的方式

    前言 想要记录一下Stack布局中,定位的两种方式 代码 //……省略无关代码…… child: new Column( children: <Widget>[ new SizedBox( ...

  2. UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ordin al not in range(128)——解决方案备注

    在vim中使用ycm插件时,偶尔会出现: “UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ord ...

  3. Oracle EBS 配置文件取值

    SELECT op.profile_option_id, tl.profile_option_name, tl.user_profile_option_name, lv.level_id, lv.文件 ...

  4. [WinCE] Win CE 屏幕截图

    VS2005自带了这个工具,这个工具的名称为:“远程放大”,其路径为:"C:\Program Files\CE Remote Tools\5.01\bin\cczoom.exe" ...

  5. [WinCE] Can't find P/Invoke DLL sqlceme35.dll

    找到目录: C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i 将 sqlce ...

  6. voltdb数据库持久性,扩展集群

    之前在git上下载的voltdb,以及在官网下载的社区版voltdb均不支持持久性事务,和扩展集群,今天下载了企业试用版voltdb,安装过程不再赘述,记录一下我的使用过程 持久性测试 以前的 vol ...

  7. 转: c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法

    //这样产生0 ~ 100的强随机数(含100) ; int rnd = int.MinValue; decimal _base = (decimal)long.MaxValue; ]; System ...

  8. 简易使用UILabel的富文本

    简易使用UILabel的富文本 使用效果: 源码: NSString+YX.h    NSString+YX.m // // NSString+YX.h // YXKit // // Copyrigh ...

  9. 前端 网络三剑客之html 01

    一.引语 1.html是什么? 1.超文本标记语言(Hypertext Markup Language):简称HTML或html.是通过标签语言来标记要显示的网页中的各个部分. 2.它遵循一套浏览器的 ...

  10. Codewars, Leetcode, Hackerrank. Online Judges Reviews

    http://jasonjl.me/blog/2015/03/30/practical-programming-practice-services/ Codewars, Leetcode, Hacke ...