【PHP】php中实现3DES算法(ECB加密模式PKCS5Padding填充)
CrazyPanda发表于:2024-01-04 23:15:08浏览:303次
讲道理,一提到3DES算法,首先想到的是要和java做交互了==
现在3DES已经渐渐被抛弃了,尤其是ECB加密模式使用的更少了,但是没办法,业务需要,合作方用的是他,你头再铁也不能怎样,那就扒扒文档咯
网上完整的php实现以经不多了,CBC加密模式居多,所以我参考了好几篇文章,整理了一个class出来,共享上来,避免后来人踩坑
感谢前人的整理总结:
PHP版3DES加解密类更新成PKCS5填充模式 (http://blog.163.com/hui\_san/blog/static/5710286720103169370195/)
java和php对等的3DES加密算法(http://jamie-wang.iteye.com/blog/1604596)
JAVA和PHP通用的加解密整理版(http://www.blogjava.net/qileilove/archive/2013/09/16/404111.html)
在线测试网址 http://tool.chacuo.net/crypt3des
<?php /** * Created by PhpStorm. * User: KeenSting * Date: 2017/11/23 * Time: 下午2:28 * Name: 梁小苍 * Phone: 13126734215 * QQ: 707719848 * File Description: 3DES_ECB_PKCS5Padding */ class TripleDesEcb{ /**加密 * @param $text string 文本内容 * @param $key string 秘钥 max 24 * @return string */ public function encrypt($text,$key) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES,MCRYPT_MODE_ECB), MCRYPT_RAND); $text = $this->pkcs5Pad($text); $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,''); mcrypt_generic_init($td,$key,$iv); $data = base64_encode(mcrypt_generic($td, $text)); mcrypt_generic_deinit($td); mcrypt_module_close($td); print_r($data); return $data; } /**解密 * @param $text * @param $key */ public function decrypt($text,$key) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES,MCRYPT_MODE_ECB), MCRYPT_RAND); $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); mcrypt_generic_init($td, $key, $iv); $data = $this->pkcs5UnPad(mdecrypt_generic($td, base64_decode($text))); mcrypt_generic_deinit($td); mcrypt_module_close($td); print_r($data); } /** * @param $text * @return string */ private function pkcs5Pad($text) { $pad = 8 - (strlen($text) % 8); return $text . str_repeat(chr($pad), $pad); } /** * @param $text * @return bool|string */ private function pkcs5UnPad($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); } } //test $a = new TripleDesEcb(); $r = $a->encrypt('keensting','AA190CD754A89EF100190CD754A89EF1'); $a->decrypt($r,'AA190CD754A89EF100190CD754A89EF1'); //测试的加密结果经过base64编码后为:juyYkxc6B+Ym3p8QQdvXIg==,解密即可得到原文(对称加密算法的加密和解密用的是同一个类)
本文转自php中实现3DES算法(ECB加密模式PKCS5Padding填充)-CSDN博客如有侵权可联系删除
猜你喜欢
- 【PHP】ThinkPHP 资源路由的简单使用,restfull风格API
- 一、资源控制器资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用:php think make:controller index@TestR # php think make:controller 应用名@资源控制名或者使用完整的命名空间生成php think make:controller app\index\c
- 【PHP】RabbitMQ简介
- 1. RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP 中消息的路由过程和 Java 开发者熟悉的 JMS 存在一些差别,AMQP 中增加了 Exchange 和 Binding 的角色。生产者把消息发布到
- 【PHP】设计模式的六大原则
- 设计模式的六大原则是指导软件开发设计的核心原则,它们帮助开发人员创建可维护、可扩展和灵活的软件系统。这些原则包括: 单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因。这有助于减少类与类之间的耦合,提高类的内聚性和可读性。 开闭原则(Open-Closed Principle, OCP):软件实体(如类、
- 【PHP】PHP8.1新特性大讲解之Fibers with a grain of salt
- Fibers with a grain of salt所以我打算写一篇关于在PHP 8.1 中使用Fibers纤维的深入博客文章。我们将从一个基本示例开始,从头开始解释它们。这个想法是发送异步 HTTP 请求并使用纤程并行处理它们。但是和他们一起玩,我了解到RFC并不是在开玩笑,当它说“不应直接在应用程序级代码中使用 Fiber API。Fibers 提供了一个基本的、低级的流控制 API 来创建更高然后在应用程序代码中使用的级抽象”。因此,与其走这条路并使事情变得过于复杂,我们将讨论什么是纤程
- 【PHP】PHP静态方法的优缺点
- 在PHP中,静态方法是一种特殊类型的方法,它不需要实例化类的对象就可以直接通过类名调用。静态方法通常用于那些不需要访问对象状态的场景,例如工具类、配置类或工厂模式等。下面将详细讨论静态方法的优缺点。
- 【PHP】从服务器负载一路走到PHP-FPM优化终于搞定了PHP项目偶尔很慢的问题
- 原文链接https://zhuanlan.zhihu.com/p/681575918项目情况: 阿里云Rds 阿里云Redis PHP8 IN Docker本文会从几个方面来讲PHP线上项目怎么进行性能瓶颈定位,以及优化方法。前段时间有个PHP项目开始出现偶尔有一些请求会超时,最长的请求可能需要长达20S。 一般出现这总情况的时候,我们首先想到的会不会服务器负载不够,或者个某个查询花了太多时间。观察服务器负载服务器负载 30% 左右,一切正常数据库负载 60% 左右,一切正常Redis负载 3
- 【PHP】PHP 框架中大型项目代码维护挑战与解决方法
- 在大型 php 项目中,代码维护面临主要挑战,包括依赖管理、代码重构、代码风格和文档。解决方法包括:使用依赖项管理器管理版本冲突。使用unittest框架在重构时保持代码完整性。建立并强制执行代码风格指南。建立文档策略并使用phpdoc生成文档。PHP 框架中大型项目代码维护挑战与解决方法在大型 PHP 项目中,代码维护可能是一个艰巨的任务。随着项目规模的增长,代码库会变得庞大且复杂,从而难以管理和更新。以下是 PHP 框架中代码维护面临的主要挑战以及解决这些挑战的一些方法:挑战 1:依赖管理依
- 【PHP】如何优化ThinkPHP的URL访问方式
- 开发建议:如何优化ThinkPHP的URL访问方式引言:ThinkPHP是一款功能强大的PHP框架,广泛应用于Web开发领域。在进行Web开发时,良好的URL访问方式对于用户体验和搜索引擎优化至关重要。本文将介绍一些优化ThinkPHP的URL访问方式的建议,帮助开发者提升网站的性能和可维护性。一、使用路由功能ThinkPHP提供了强大的路由功能,可以帮助我们定义URL的访问规则,并将不同的URL映射到对应的控制器和操作方法上。合理使用路由功能,可以让URL更加友好和直观,提高用户体验
栏目分类全部>
推荐文章
- 【Redis】如何解决 Redis 大 Key(Big Key)问题
- 【Python】如何使用Python实现迪杰斯特拉算法
- 【Vue】vue3+node+Element-Ui+spark-md5实现大文件上传、断点续传、秒传、多大文件上传
- 【PHP】jsonRPC简介
- 【UniApp】利用uniapp实现表格导出功能
- 【PHP】nginx负载均衡器的部署(5层\7层)
- 【C#】C# Winform 定时清理日志
- 【Python】最全整理!37 个 Python Web 开发框架总结
- 【Python】自定义颜色在Matplotlib柱形图绘制中的应用
- 【UniApp】如何在uniapp中实现底部导航的隐藏功能