/**

*

* PHP版3DES加解密类

*

* 可与java的3DES(DESede)加密方式兼容

*

* @Author: Luo Hui (farmer.luo at gmail.com)

*

* @version: V0.1 2008.12.04

*

*/

class Crypt3Des

{

public $key    = "01234567890123456789012345678912";

public $iv    = "23456789"; //like java: private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };

//加密

public function encrypt($input)

{

$input = $this->padding( $input );

$key = base64_decode($this->key);

$td = mcrypt_module_open( MCRYPT_3DES, ”, MCRYPT_MODE_CBC, ”);

//使用MCRYPT_3DES算法,cbc模式

mcrypt_generic_init($td, $key, $this->iv);

//初始处理

$data = mcrypt_generic($td, $input);

//加密

mcrypt_generic_deinit($td);

//结束

mcrypt_module_close($td);

$data = $this->removeBR(base64_encode($data));

return $data;

}

//解密

public function decrypt($encrypted)

{

$encrypted = base64_decode($encrypted);

$key = base64_decode($this->key);

$td = mcrypt_module_open( MCRYPT_3DES,”,MCRYPT_MODE_CBC,”);

//使用MCRYPT_3DES算法,cbc模式

mcrypt_generic_init($td, $key, $this->iv);

//初始处理

$decrypted = mdecrypt_generic($td, $encrypted);

//解密

mcrypt_generic_deinit($td);

//结束

mcrypt_module_close($td);

$decrypted = $this->removePadding($decrypted);

return $decrypted;

}

//填充密码,填充至8的倍数

public function padding( $str )

{

$len = 8 – strlen( $str ) % 8;

for ( $i = 0; $i < $len; $i++ )

{

$str .= chr( 0 );

}

return $str ;

}

//删除填充符

public function removePadding( $str )

{

$len = strlen( $str );

$newstr = "";

$str = str_split($str);

for ($i = 0; $i < $len; $i++ )

{

if ($str[$i] != chr( 0 ))

{

$newstr .= $str[$i];

}

}

return $newstr;

}

//删除回车和换行

public function removeBR( $str )

{

$len = strlen( $str );

$newstr = "";

$str = str_split($str);

for ($i = 0; $i < $len; $i++ )

{

if ($str[$i] != ‘n’ and $str[$i] != ‘r’)

{

$newstr .= $str[$i];

}

}

return $newstr;

}

}

//test

$input = "1qaz2ws";

echo "plainText:" . $input."
";

$crypt = new Crypt3Des();

echo "Encode:".$crypt->encrypt($input)."
";

echo "Decode:".$crypt->decrypt($crypt->encrypt($input));

?>

结果:

plainText:1qaz2ws

Encode:0GsXgYA8BuM=

Decode:1qaz2ws

php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容相关推荐

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

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

  2. java实现对文件加解密操作

    源文件: 加密后的文件: 解密后的文件: package com.gblfy.test;import java.io.*;/*** java 实现对文件加解密的方法** @author gblfy* ...

  3. Java反射-静态/动态加载类

    title: Java反射-静态/动态加载类 date: 2019-05-28 18:50:00Java反射-静态/动态加载类 Class 类是对象,是java.lang.Class类的实例对象.任何 ...

  4. java实现国密加解密

    1. pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-j ...

  5. SM2加密解决java与iOS端加解密不配套问题

    SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...

  6. 微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java)

    微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java) 使用文章 http://blog.csdn.net/omsvip/article/details/39926493 提供的接入代码 ...

  7. JAVA实现PGP/GPG加解密

    注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢! 一.加解密的准备资料 1.1  公钥 (用于加密) 1.2  私钥(用于解密) 1.3   私钥key (用于验证私钥) 导 ...

  8. Midori64 加解密的实现(Java代码)

    根据论文Midori: A Block Cipher for Low Energy 我们通过Java实现了其加解密操作,想要了解midori算法的同学可以看我的另外一篇博文. (博文地址:https: ...

  9. aes加密php源码,AES加解密类源码 · ThinkPHP5高阶实战教程 --诠释为API开发而生 · 看云...

    # AES加解密类源码 > 根据网络整理 ~~~ /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017 ...

最新文章

  1. 数据结构与算法常用名词术语整理
  2. 如何分辨Web前端培训机构的好坏
  3. Science | 化学合成文献数字化自动执行通用系统
  4. 中小型研发团队架构实践三要点--转
  5. abap视图字段限制_MM03物料主数据视图中某些视图或者某些字段的控制方法 | 学步园...
  6. 浅谈面向对象思想下的 C 语言
  7. ftl转PDF服务器上中文不显示,解决Linux中swftools转换中文pdf时出现乱码问题
  8. 收藏网站制作常用经典css.div.布局.设计实例打包下载
  9. 魔乐手机管家V2.0内测版惊艳亮相--Android软件
  10. 入云!离开张一鸣的字节,做出了第一个重大决定
  11. 凸优化第六章逼近与拟合 6.3正则化逼近
  12. windows server 2003 下载
  13. python爬取新浪博客_python爬虫-韩寒新浪博客博文
  14. vs.Net 2003 安装
  15. 服装尺寸 html,服装尺寸S、M、L、XL、XXL分别表示的型号大小和释义(完整版)...
  16. pythonmsgbox怎么使用_详解MessageBox(),MsgBox函数的正确使用
  17. Logstash系列:发送邮件告警、发送POST告警
  18. c语言上机题库程序设计,c语言上机程序设计题库及答案.pdf
  19. linux bison 手册
  20. 需求评审会议如何召开

热门文章

  1. 计算机组成 指令扩展,计算机组成原理课程设计--指令扩展设计.doc
  2. 聚类结果不好怎么办_使用bert-serving生成词向量并聚类可视化
  3. Java黑皮书课后题第6章:*6.2(求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。使用下面的方法头:public static int sumDigits(long n)
  4. java list加入listview_Android ListView自动生成列表条目的实例
  5. jmeter接口测试----9函数助手: random, counter, time
  6. shell脚本实例-判断主机存活 以及企业备份方案
  7. 使用Amazon Simple Queue Service(SQS) 实现简单的消息服务
  8. linux命令(8)wc
  9. Python 前端的第三方库
  10. 查看oracle数据库的连接数以及用户