我的作品 您现在的位置是:首页 > 我的作品
多种算法加解密工具 crypto
来源:惠达浪原创
发布时间:2019-05-18
最后更新:2019-07-17
2107已围观
摘要由于PHP开发过程中,经常需要对信息进行可逆加解密,本人将ThinkPHP 3.x中的加解密类进行了重新封装,统一处理。本版中支持6种算法:AES、Base64、Crypt、Des、Think和Xxtea。
Crazy/crypto
在平时的开发过程中,有时候需要对某些信息进行加密/解密处理,而现有的一些工具,算法需要自己处理,调用起来也是麻烦。早期的ThinkPHP中,内置了一个加密器,后来由于版本升级,这个功能去除了。现在我将这个加密类重新处理封装了一下,制作成小工具,方便大家使用。
可能有的朋友奇怪,什么时候需要这个呢?难道是核对密码?当然不是,关于密码,学问大了去了,我自己也不是很清楚,因此也不在这儿讨论。我自己主要用来处理前端数据。比如,前端需要编辑某些信息,而这个信息的id,或者是订单号,或者是其它什么敏感的,不能篡改却又不得不提供的信息,最好是后台加密后,送到前端。当前端编辑好信息之后,再把这个信息解密。当然,关于加解密,应用场景多了去了,我仅仅是举个例子而已,你可千万别在这儿跟我抬杠。
应用环境:
凡是PHP的程序,就有环境需求,crypto也不例外,要求很简单,就是你的PHP版本需要在5.6以上,包含5.6。低于这个版本也许能用,没测试,撞大运吧。
安装:
1、Github下载发行版,地址:https://github.com/crazys1973/crypto/releases/latest ,慢是慢了点,可是简单灵活啊,根据自己的情况,下载压缩包,再自行安排。
当然,码云是国内的,这个会很快,地址:https://gitee.com/crazys1973/crypto/releases 。
2、Github或者码云 clone。
git:https://github.com/crazys1973/crypto
码云:https://gitee.com/crazys1973/crypto.git
3、最后推荐使用composer安装,最最省心省事了。
composer require crazy/crypto
使用:
安装如此简单,使用当然也必须简单。
加密
语法:
Crypto::{加密算法}()->encrypt(string $data, string $key[, int $expire = 0]);
返回:加密过后的字符串。
说明:
{加密算法}:加密算法类的名称,目前支持 6 种,分别是:`AES`、`Base64`、`Crypt`、`Des`、`Think`和`Xxtea`。算法名大小写不敏感,Base64与bAsE64效果相同。如果算法名写错,则默认使用Think算法。
$data:需要加密的字符串。
$key:加密key,参与加密运算的字符串,也就是盐。
$expire:有效期,单位为秒。默认值为0,也就是永久有效。
使用案例:
// 使用Base64算法加密 $encryptString = Crypto::Base64()->encrypt('Hello world!', 'key123'); // 使用ThinkPHP算法加密,有效期5分钟 $encryptString = Crypto::Think()->encrypt('Hello world!', 'key123', 300);
解密
语法:
Crypto::{加密算法}()->decrypt(string $data, string $key);
返回:解密成功时返回解密字符串。解密失败或加密串过期,返回空字符串 '' 。如果算法名写错,则默认使用Think算法。
说明:
$data:需要解密的字符串,通常是加密过后的一串密文。
$key:加密时使用的加密key。
使用案例:
// 使用Think算法解密 $data = 'sXym2IR3c62yeqbagn6ZosOq29p_rZTZnNGqoX20c3A'; echo Crypto::Base64()->decrypt($data, 'key123'); // 输出:Hello World!
二次开发
懂PHP开发的同行们,其实你们一看代码就明白了,不过我还是要废话一下,彰显一下我的语言水平。
本人使用了PHP特有的魔术方法,所以如果你要扩展新的类,只需在 lib 文件夹下创建你自己的类,再实现 Cryptoable 接口,按相同的签名完成你的类就可以了。
比如:
namespace Crazy\lib; use Crazy\Cryptoable; class MyCrypt implements Cryptoable // 实现接口就是为了规范 { // 接口规定的加密方法,必须有 public function encrypt($data, $key, $expire = 0) { // 你自己的加密方法 } // 接口规定的解密方法,也必须得有 public function decrypt($data, $key) { // 你自己的解密方法 } }
写完了,咋用呢?和我的方法一样啊:
// 加密 $encryptString = Crypto::MyCrypt()->encrypt('Hello world!', 'key123'); // 解密 $data = 'XSfsdfil34523'; //反正是你的加密串,我又不知道规则 $decryptString = Crypto::MyCrypt()->decrypt('Hello world!', 'key123');
很赞哦! (555)
上一篇: ACME模板
下一篇: 80%的人都喜欢的博客模板
评论
点击 排行

本栏推荐

猜你喜欢
站点信息
- 开发框架:ThinkCMF 8.0.1
- PHP版本:8.3.15
- 操作系统:Linux
- 运行环境:nginx/1.24.0
- 数据库: MySQL 8.0.24