我的作品 您现在的位置是:首页 > 我的作品

多种算法加解密工具 crypto

来源:惠达浪原创 发布时间:2019-05-18 最后更新:2019-07-17 1461已围观

摘要由于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');


很赞哦! (405)


上一篇: ACME模板

下一篇: 80%的人都喜欢的博客模板

站点信息

  • 网站平台ThinkCMF 5.1.5
  • PHP版本:7.3.31
  • QQ交流群: 惠达浪技术交流