• 为了增加数据的安全性

  • 避免相同字符多次加密得到结果是一致的

  • 可以设置密文有效期

    加密方式:Mcrypt::encode($Str, $n);

    解密方式: Mcrypt::decode($Str, $n);

require("Mcrypt.class.php") ;
$code = Mcrypt::encode('sajkfcasjcla','7580');
echo "code-".$code;$code_ans = Mcrypt::decode("$code",'7580');
echo "answer-".$code_ans;

Mcrypt.class.php

/*
* 字符串加解密类;
* 一次一密;且定时解密有效
* 可用于加密&动态key生成*/
class Mcrypt{public $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 : $this->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 : $this->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 '';} }
}

PHP字符串增强加密相关推荐

  1. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  2. Web.config中连接字符串的加密和解密

    Web.config中连接字符串的加密和解密  我们采用命令行的方式进行加密和解密.使用ASP.NET2.0提供的命令行工具aspnet_regiis.exe,该应用程序位系统目录下Microsoft ...

  3. php生成唯一的加密串,hashids.php-master整数生成唯一字符串的加密库

    hashids.php-master整数生成唯一字符串的加密库 namespace Hashids; class Hashids implements HashidsInterface { const ...

  4. 1.16 字符串的加密解密

    为了保证程序的安全,经常采用数据加密的方法.Java 中提供了专门用于加密运算的类和接口. 除了使用加密类和接口外,还可以通过多种方式实现字符串的加密.其中常用的就是获取字符串的字节数组,之后对字节数 ...

  5. 【python3】通过hashlib 和base64 对字符串进行加密

    这篇文章是讲述 如何通过hashlib 和base64 对字符串进行加密的 hashlib 强大的hashlib,提供了用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA2 ...

  6. aes256 加密后的长度_视频会议Zoom 5.0版本重大更新,增强加密功能提供更多安全选项...

    今日据悉,Zoom视频通信公司公布了Zoom 5.0的详细信息,这是对其视频会议客户端的一次重大更新,以解决最近几周发现的许多安全和隐私问题. Zoom 5.0重大更新 增强加密功能提供更多安全选项 ...

  7. 加密选项_视频会议Zoom 5.0版本重大更新,增强加密功能提供更多安全选项

    今日据悉,Zoom视频通信公司公布了Zoom 5.0的详细信息,这是对其视频会议客户端的一次重大更新,以解决最近几周发现的许多安全和隐私问题. Zoom 5.0重大更新 增强加密功能提供更多安全选项 ...

  8. python如何加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  9. 探讨C#中字符串的加密

    探讨C#中字符串的加密 C#中字符串的加密可以用DSA和RSA,先要将字符串转换为字节数组,这与编码有关.再选择签名方式,有RSA和DSA,sign便是出来的签名结果. 可以用DSA和RSA,如: u ...

最新文章

  1. 看似简单的问题 静态方法和实例化方法的区别
  2. 以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末
  3. vscode 一些基本知识
  4. P1537 弹珠 背包可行性dp
  5. 原生态HTML文件上传与下载
  6. 求你了,别再说Java对象都是在堆内存上分配空间的了!
  7. php点赞,php如何实现点赞
  8. 基于SSM框架的电影订票系统
  9. 永久且免费的CRM系统排行
  10. 基于YOLO v5 的AI眼诊
  11. 照片幻灯片java_Java的POI向幻灯片中插入图片算法设计
  12. 基于nodejs的excel表格合并工具
  13. 「网络安全」将会是下一个风口?这个“下饭神剧”值得一看!
  14. 软件包管理:rpm和yum
  15. Verilog十大基本功5 (关于verilog中的signed类型)
  16. 领袖的七个非常重要的根性-余世维
  17. 云基础架构安全_这是使您的云基础架构稳定,安全和可扩展的方法。
  18. 流量排名100W网站
  19. 纳什均衡与帕累托最优
  20. 炉石android更新日志,炉石传说18.4版本更新了什么?18.4版本更新内容汇总[多图]...

热门文章

  1. python画饼图加牵引线_python-Matplotlib绘制分列式饼图并添加表格
  2. PIE SDK剔除栅格块算法
  3. 在java web项目中实现随项目启动的额外操作
  4. js前台页面显示中文,后台存对应的value值实现
  5. [剑指offer] 矩阵覆盖
  6. lua-5.2.3编译问题记录quot;libreadline.so: undefined reference to `PC#39;quot;
  7. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
  8. java-四则运算,自动出题(4)
  9. 紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*
  10. Python列表综合