PHP加密解密模块示例 | 数据安全性增强 | 有效期设置 | Mcrypt.class.php

  介绍一个PHP加密解密模块,它非常好用且功能强大。使用该模块能够对数据进行加密和解密操作,而且每次加密相同的字符串都会得到不同的结果。同时,您还可以设置加密后数据的有效期,提高数据安全性。接下来,我们将详细介绍该模块的使用方法和完整代码。

使用方法

  1、将以下模块代码保存为Mcrypt.class.php文件,Mcrypt.class.php模块完整代码:

<?php
 
/*
*------
* 字符串加解密类;
* 一次一密;且定时解密有效
* 可用于加密&动态key生成
* demo:  
* 加密:echo Mcrypt::encode('abc','123');
* 解密:echo Mcrypt::decode('9f843I0crjv5y0dWE_-uwzL_mZRyRb1ynjGK4I_IACQ','123');
*/
class Mcrypt{
  private static $default_key = 'a!takA:dlmcldEv,e';
  
  /**
   * 字符加密,一次一密,可定时解密有效
   * 
   * @param string $string 原文
   * @param string $key 密钥
   * @param int $expiry 密文有效期,单位s,0 为永久有效
   * @return string 加密后的内容
   */
  public static function encode($string,$key = '', $expiry = 0){
    $ckeyLength = 4;
    $key = md5($key ? $key : self::$default_key); //解密密匙
    $keya = md5(substr($key, 0, 16));     //做数据完整性验证  
    $keyb = md5(substr($key, 16, 16));     //用于变化生成的密文 (初始化向量IV)
    $keyc = substr(md5(microtime()), - $ckeyLength);
    $cryptkey = $keya . md5($keya . $keyc);  
    $keyLength = strlen($cryptkey);
    $string = sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string . $keyb), 0, 16) . $string;
    $stringLength = strlen($string);
 
    $rndkey = array();  
    for($i = 0; $i <= 255; $i++) {  
      $rndkey[$i] = ord($cryptkey[$i % $keyLength]);
    }
 
    $box = range(0, 255);  
    // 打乱密匙簿,增加随机性
    for($j = $i = 0; $i < 256; $i++) {
      $j = ($j + $box[$i] + $rndkey[$i]) % 256;
      $tmp = $box[$i];
      $box[$i] = $box[$j];
      $box[$j] = $tmp;
    }  
    // 加解密,从密匙簿得出密匙进行异或,再转成字符
    $result = '';
    for($a = $j = $i = 0; $i < $stringLength; $i++) {
      $a = ($a + 1) % 256;
      $j = ($j + $box[$a]) % 256;
      $tmp = $box[$a];
      $box[$a] = $box[$j];
      $box[$j] = $tmp; 
      $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
    $result = $keyc . str_replace('=', '', base64_encode($result));
    $result = str_replace(array('+', '/', '='),array('-', '_', '.'), $result);
    return $result;
  }
 
  /**
   * 字符解密,一次一密,可定时解密有效
   * 
   * @param string $string 密文
   * @param string $key 解密密钥
   * @return string 解密后的内容
   */
  public static function decode($string,$key = '')
  {
    $string = str_replace(array('-', '_', '.'),array('+', '/', '='), $string);
    $ckeyLength = 4;
    $key = md5($key ? $key : self::$default_key); //解密密匙
    $keya = md5(substr($key, 0, 16));     //做数据完整性验证  
    $keyb = md5(substr($key, 16, 16));     //用于变化生成的密文 (初始化向量IV)
    $keyc = substr($string, 0, $ckeyLength);
    $cryptkey = $keya . md5($keya . $keyc);  
    $keyLength = strlen($cryptkey);
    $string = base64_decode(substr($string, $ckeyLength));
    $stringLength = strlen($string);
 
    $rndkey = array();  
    for($i = 0; $i <= 255; $i++) {  
      $rndkey[$i] = ord($cryptkey[$i % $keyLength]);
    }
 
    $box = range(0, 255);
    // 打乱密匙簿,增加随机性
    for($j = $i = 0; $i < 256; $i++) {
      $j = ($j + $box[$i] + $rndkey[$i]) % 256;
      $tmp = $box[$i];
      $box[$i] = $box[$j];
      $box[$j] = $tmp;
    }
    // 加解密,从密匙簿得出密匙进行异或,再转成字符
    $result = '';
    for($a = $j = $i = 0; $i < $stringLength; $i++) {
      $a = ($a + 1) % 256;
      $j = ($j + $box[$a]) % 256;
      $tmp = $box[$a];
      $box[$a] = $box[$j];
      $box[$j] = $tmp; 
      $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
    if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0)
    && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)
    ) {
      return substr($result, 26);
    } else {
      return '';
    } 
  }
}

  2、在需要使用该模块的地方,通过require方式引入该模块,也可以自行封装,使用命名空间引入

require('Mcrypt.class.php');

加密数据方法

  使用以下代码可以加密一个数据:

echo Mcrypt::encode('要加密的内容', '密匙');

其中,要加密的内容是您想要加密的数据,密匙则是用于加密的密钥。

解密数据方法

  使用以下代码可以解密一个密文:

echo Mcrypt::decode('密文', '加密时的密匙');

  其中,密文是需要解密的内容,加密时的密匙则是当初进行加密时所使用的密钥。

示例代码解析

  在Mycrypt类中,有两个静态方法encode和decode分别用于加密和解密数据。这些方法内部采用了一次一密的加密算法,并可根据设定的有效期进行解密操作。

  具体加密流程如下:

    1、生成密匙($keya)和初始化向量($keyb)。

    2、生成随机密匙簿($rndkey)和打乱密匙簿顺序($box)。

    3、对原文进行加密运算,并按照规定格式返回加密结果。

  解密流程如下:

    1、还原密匙($keya, $keyb)和密匙簿($rndkey, $box)。

    2、对密文进行解密运算,并根据规定的有效期及数据完整性验证返回解密结果。

总结

  通过以上文章内容,你应该已经了解了这个使用的PHP加密解密模块Mcrypt.class.php。该模块可以有效增强数据的安全性,同时也提供了设置加密后数据的有效期的功能。希望对您的开发工作有所帮助!

  关键词:PHP加密解密模块, 数据安全性, 有效期设置, Mcrypt.class.php文章来源地址https://www.toymoban.com/diary/php/546.html

到此这篇关于PHP加密解密模块示例 | 数据安全性增强 | 有效期设置 | Mcrypt.class.php的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/php/546.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年11月23日 22:51
分享一个非常精简且好看的文章列表源码,首页三格模板
下一篇 2023年11月23日 23:11

相关文章

  • RSA加密解密(无数据大小限制,php、go、java互通实现)

    RSA加解密中必须考虑到的**长度、明文长度和密文长度问题。明文长度需要小于**长度,而密文长度则等于**长度。因此当加密内容长度大于**长度时,有效的RSA加解密就需要对内容进行分段。 这是因为,RSA算法本身要求加密内容也就是明文长度m必须0m**长度n。如果小于这个长

    2024年02月15日
    浏览(21)
  • php对称加密AES加密解密

    AES-128-ECB和AES-256-CBC是两种常见的AES加密模式,它们在加密方式和安全性上有以下区别: 加密方式: AES-128-ECB:ECB(Electronic Codebook)模式是最简单的AES加密模式,它将数据分成固定大小的块,每个块独立加密。这意味着相同的明文块将始终加密为相同的密文块,因此ECB模式不

    2024年02月09日
    浏览(21)
  • 几种PHP对称加密解密源码

    最近搞一点东西要用到对称加密,于是在网上找到一个不错的对称加密方法,分享给大家。 安全URL编码 UTF8字符串加密 别的方法 auth_code优化版

    2024年01月18日
    浏览(25)
  • 国密SM2前端加密解密示例

    目录 一、 安装sm2依赖 二、编写代码 1、data中绑定数据 2、公钥加密 3、私钥解密 4、按钮绑定一下,数据可见一下 三、完整代码 要改变的数据phone和过程数据copyphone,公钥publicKey和私钥privateKey 具体生成测试公钥私钥可参照SM2加解密 C1为65字节第1字节为压缩标识,这里固定为

    2024年02月03日
    浏览(25)
  • 【教程】解决php微擎中的goto加密解密,一键解密工具

    今天,我将向大家揭秘一款神奇的工具——goto解密工具,轻松解密这个看似棘手的问题。 无数开发者都曾因为php中的goto功能而头疼不已。goto解密工具其中之一就是解密goto代码。通过精妙的算法和强大的解析能力,它能够解密被goto加密的代码段,使你能够清晰地理解代码的

    2024年02月11日
    浏览(25)
  • Java 实现 AES 加密和解密完整示例

    AES,全称为 Advanced Encryption Standard,是一种分组密码算法,用于保护敏感数据的传输和存储。AES 分为 128 位和 256 位两种密钥长度,可以对数据进行加密和解密,保证数据的安全性和完整性。AES 主要应用于电子商务、移动支付、网络安全等领域,被广泛运用于现代社会的各个

    2024年02月04日
    浏览(23)
  • PHP非对称与对称双向加密解密的方式

    目录 RSA非对称加密解密: 什么是RSA非对称加密解密解析: 解析: 为什么使用: 有什么优点: DEMO: AES、DES、3DES等对称加密解密: 解析: 为什么使用: 有什么优点: DEMO: 什么是RSA非对称加密解密解析: 解析: RSA非对称加密解密算法是一种广泛应用于信息安全领域的加密算法。它不同于

    2024年02月07日
    浏览(20)
  • 前端开发之jsencrypt加密解密的使用方法和使用示例

    jsencrypt官方文档 公钥私钥生成网址 jsencrypt就是一个基于rsa加解密的js库,常用在向后台发送数据的时候 本文是通过node.js的window.btoa和window.atob配合jsencrypt进行加密

    2024年02月16日
    浏览(25)
  • ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式、爬虫阻止)

    “已阅即焚” 是一种通信方式,它指的是一旦消息被对方阅读后,消息内容会被自动删除或销毁,不再留下任何痕迹。这种方式通常用于提高信息的安全性和隐私保护。 在传统的通信应用中,已阅即焚的功能可以通过以下几种方式实现: 自动删除:消息在对方阅读后,会自

    2024年02月16日
    浏览(28)
  • 利用Base64加密算法将数据加密解密

    Base64准确来说并不像是一种加密算法,而更像是一种编码标准。 我们知道现在最为流行的编码标准就是ASCLL,它用八个二进制位(一个char的大小)表示了127个字符,任何二进制序列都可以用这127个字符表示出来。 而Base64则是用6个二进制位表示了64个字符,也就是说,任何的

    2024年04月09日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包