0

0

php对称加密算法的例子_PHP教程

php中文网

php中文网

发布时间:2016-07-13 10:30:08

|

959人浏览过

|

来源于php中文网

原创

分享下php对称加密算法的实现代码。

KEY 是之前定义的常量

Mcrypt::<span encrypt();
Mcrypt</span>::<span decrypt();

</span><span defined</span>('ROOT') or <span exit</span>('Access Denied'<span );
</span><span class</span><span  Mcrypt{

</span><span public</span> <span static</span> <span function</span> encrypt(<span $code</span><span ){
</span><span return</span> <span base64_encode</span>(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, <span md5</span>(<span KEY</span>), <span $code</span>, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span  MCRYPT_RAND)));
}

</span><span public</span> <span static</span> <span function</span> decrypt(<span $code</span><span ){
</span><span return</span> mcrypt_decrypt(MCRYPT_RIJNDAEL_256, <span md5</span>(<span KEY</span>), <span base64_decode</span>(<span $code</span>), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span  MCRYPT_RAND));
}
}</span>

xcrypt.php

PaperFake
PaperFake

AI写论文

下载
<span /*</span><span * 
* 常用对称加密算法类 
* 支持密钥:64/128/256 bit(字节长度8/16/32) 
* 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit) 
* 支持模式:CBC/ECB/OFB/CFB 
* 密文编码:base64字符串/十六进制字符串/二进制字符串流 
* 填充方式: PKCS5Padding(DES) 
* 
* @author: linvo 
* @version: 1.0.0 
* @date: 2013/1/10 
</span><span */</span> 
<span class</span><span  Xcrypt{

</span><span private</span> <span $mcrypt</span><span ; 
</span><span private</span> <span $key</span><span ; 
</span><span private</span> <span $mode</span><span ; 
</span><span private</span> <span $iv</span><span ; 
</span><span private</span> <span $blocksize</span><span ;

</span><span /*</span><span * 
* 构造函数 
* 
* @param string 密钥 
* @param string 模式 
* @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,长度同密钥) 
</span><span */</span> 
<span public</span> <span function</span> __construct(<span $key</span>, <span $mode</span> = 'cbc', <span $iv</span> = "off"<span ){ 
</span><span switch</span> (<span strlen</span>(<span $key</span><span )){ 
</span><span case</span> 8: 
<span $this</span>->mcrypt =<span  MCRYPT_DES; 
</span><span break</span><span ; 
</span><span case</span> 16: 
<span $this</span>->mcrypt =<span  MCRYPT_RIJNDAEL_128; 
</span><span break</span><span ; 
</span><span case</span> 32: 
<span $this</span>->mcrypt =<span  MCRYPT_RIJNDAEL_256; 
</span><span break</span><span ; 
</span><span default</span>: 
<span die</span>("Key size must be 8/16/32"<span ); 
} www</span>.jbxue.<span com

</span><span $this</span>-><span key</span> = <span $key</span><span ;

</span><span switch</span> (<span strtolower</span>(<span $mode</span><span )){ 
</span><span case</span> 'ofb': 
<span $this</span>->mode =<span  MCRYPT_MODE_OFB; 
</span><span if</span> (<span $iv</span> == 'off') <span die</span>('OFB must give a IV'); <span //</span><span OFB必须有向量 </span>
<span break</span><span ; 
</span><span case</span> 'cfb': 
<span $this</span>->mode =<span  MCRYPT_MODE_CFB; 
</span><span if</span> (<span $iv</span> == 'off') <span die</span>('CFB must give a IV'); <span //</span><span CFB必须有向量 </span>
<span break</span><span ; 
</span><span case</span> 'ecb': 
<span $this</span>->mode =<span  MCRYPT_MODE_ECB; 
</span><span $iv</span> = 'off'; <span //</span><span ECB不需要向量 </span>
<span break</span><span ; 
</span><span case</span> 'cbc': 
<span default</span>: 
<span $this</span>->mode =<span  MCRYPT_MODE_CBC; 
}

</span><span switch</span> (<span strtolower</span>(<span $iv</span><span )){ 
</span><span case</span> "off": 
<span $this</span>->iv = <span null</span><span ; 
</span><span break</span><span ; 
</span><span case</span> "auto": 
<span $source</span> = <span PHP_OS</span>=='WINNT' ? MCRYPT_RAND :<span  MCRYPT_DEV_RANDOM; 
</span><span $this</span>->iv = mcrypt_create_iv(mcrypt_get_block_size(<span $this</span>->mcrypt, <span $this</span>->mode), <span $source</span><span ); 
</span><span break</span><span ; 
</span><span default</span>: 
<span $this</span>->iv = <span $iv</span><span ; 
} 
}

</span><span /*</span><span * 
* 获取向量值 
* @param string 向量值编码(base64/hex/bin) 
* @return string 向量值 
</span><span */</span>  www.jbxue.<span com
</span><span public</span> <span function</span> getIV(<span $code</span> = 'base64'<span ){ 
</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $ret</span> = <span base64_encode</span>(<span $this</span>-><span iv); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $ret</span> = <span bin2hex</span>(<span $this</span>-><span iv); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>: 
<span $ret</span> = <span $this</span>-><span iv; 
} 
</span><span return</span> <span $ret</span><span ; 
} 

</span><span /*</span><span * 
* 加密 
* @param string 明文 
* @param string 密文编码(base64/hex/bin) 
* @return string 密文 
</span><span */</span> 
<span public</span> <span function</span> encrypt(<span $str</span>, <span $code</span> = 'base64'<span ){ 
</span><span if</span> (<span $this</span>->mcrypt == MCRYPT_DES) <span $str</span> = <span $this</span>->_pkcs5Pad(<span $str</span><span );

</span><span if</span> (<span isset</span>(<span $this</span>-><span iv)) { 
</span><span $result</span> = mcrypt_encrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>->mode, <span $this</span>-><span iv); 
} </span><span else</span><span  { 
@</span><span $result</span> = mcrypt_encrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>-><span mode); 
}

</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $ret</span> = <span base64_encode</span>(<span $result</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $ret</span> = <span bin2hex</span>(<span $result</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>: 
<span $ret</span> = <span $result</span><span ; 
}

</span><span return</span> <span $ret</span><span ;

}

</span><span /*</span><span * 
* 解密 
* @param string 密文 
* @param string 密文编码(base64/hex/bin) 
* @return string 明文 
</span><span */</span> 
<span public</span> <span function</span> decrypt(<span $str</span>, <span $code</span> = "base64"<span ){ 
</span><span $ret</span> = <span false</span><span ;

</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $str</span> = <span base64_decode</span>(<span $str</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $str</span> = <span $this</span>->_hex2bin(<span $str</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>:<span  
}

</span><span if</span> (<span $str</span> !== <span false</span><span ){ 
</span><span if</span> (<span isset</span>(<span $this</span>-><span iv)) { 
</span><span $ret</span> = mcrypt_decrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>->mode, <span $this</span>-><span iv); 
} </span><span else</span><span  { 
@</span><span $ret</span> = mcrypt_decrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>-><span mode); 
} 
</span><span if</span> (<span $this</span>->mcrypt == MCRYPT_DES) <span $ret</span> = <span $this</span>->_pkcs5Unpad(<span $ret</span><span ); 
</span><span $ret</span> = <span trim</span>(<span $ret</span><span ); 
}

</span><span return</span> <span $ret</span><span ; 
}

</span><span private</span> <span function</span> _pkcs5Pad(<span $text</span><span ){ 
</span><span $this</span>->blocksize = mcrypt_get_block_size(<span $this</span>->mcrypt, <span $this</span>-><span mode); 
</span><span $pad</span> = <span $this</span>->blocksize - (<span strlen</span>(<span $text</span>) % <span $this</span>-><span blocksize); 
</span><span return</span> <span $text</span> . <span str_repeat</span>(<span chr</span>(<span $pad</span>), <span $pad</span><span ); 
}

</span><span private</span> <span function</span> _pkcs5Unpad(<span $text</span><span ){ 
</span><span $pad</span> = <span ord</span>(<span $text</span>{<span strlen</span>(<span $text</span>) - 1<span }); 
</span><span if</span> (<span $pad</span> > <span strlen</span>(<span $text</span>)) <span return</span> <span false</span><span ; 
</span><span if</span> (<span strspn</span>(<span $text</span>, <span chr</span>(<span $pad</span>), <span strlen</span>(<span $text</span>) - <span $pad</span>) != <span $pad</span>) <span return</span> <span false</span><span ; 
</span><span $ret</span> = <span substr</span>(<span $text</span>, 0, -1 * <span $pad</span><span ); 
</span><span return</span> <span $ret</span><span ; 
}

</span><span private</span> <span function</span> _hex2bin(<span $hex</span> = <span false</span><span ){ 
</span><span $ret</span> = <span $hex</span> !== <span false</span> && <span preg_match</span>('/^[0-9a-fA-F]+$/i', <span $hex</span>) ? <span pack</span>("H*", <span $hex</span>) : <span false</span><span ; 
</span><span return</span> <span $ret</span><span ; 
} 
} </span>

立即学习PHP免费学习笔记(深入)”;

<?<span php 
</span><span header</span>('Content-Type:text/html;Charset=utf-8;'<span );

</span><span include</span> "xcrypt.php"<span ;

</span><span echo</span> '<pre class="brush:php;toolbar:false;">'<span ; 
</span><span $a</span> = <span isset</span>(<span $_GET</span>['a']) ? <span $_GET</span>['a'] : '测试123'<span ;

</span><span //</span><span 密钥 </span>
<span $key</span> = '12345678123456781234567812345678'; <span //</span><span 256 bit </span>
<span $key</span> = '1234567812345678'; <span //</span><span 128 bit </span>
<span $key</span> = '12345678'; <span //</span><span 64 bit

//设置模式和IV </span>
<span $m</span> = <span new</span> Xcrypt(<span $key</span>, 'cbc', 'auto'<span );

</span><span //</span><span 获取向量值 </span>
<span echo</span> '向量:'<span ; 
</span><span var_dump</span>(<span $m</span>-><span getIV());

</span><span //</span><span 加密 </span>
<span $b</span> = <span $m</span>->encrypt(<span $a</span>, 'base64'<span ); 
</span><span //</span><span 解密 </span>
<span $c</span> = <span $m</span>->decrypt(<span $b</span>, 'base64'<span );

</span><span echo</span> '加密后:'<span ; 
</span><span var_dump</span>(<span $b</span><span ); 
</span><span echo</span> '解密后:'<span ; 
</span><span var_dump</span>(<span $c</span><span ); 
</span><span echo</span> '
';

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/767256.htmlTechArticle分享下php对称加密算法的实现代码。 KEY 是之前定义的常量 Mcrypt:: :: ('ROOT') or ('Access Denied' encrypt( (mcrypt_encrypt(MCRYPT_RIJNDAEL_256, ( ), , MCRYPT_M...
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 路由精讲视频教程
React 路由精讲视频教程

共10课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号