php里面简单的加解密函数:

#测试加解密
public function testAuthCode()
{$encypt = $this->authCode('1', 'qwe');$decypt = $this->authCode($encypt, 'DECODE');echo $encypt . '<br>';echo $decypt . '<br>';
}#加密解密函数,只有当$operation=DECODE的时候,才是解密:
public function authCode($string, $operation = 'DECODE', $key = '', $expiry = 0)
{// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙$ckey_length = 4;// 密匙#这个key值可以临时传,我这边时设置一个固定的,存在配置文件里面$key = md5($key ? $key : config('kid_crm.auth_key'));// 密匙a会参与加解密$keya = md5(substr($key, 0, 16));// 密匙b会用来做数据完整性验证$keyb = md5(substr($key, 16, 16));// 密匙c用于变化生成的密文$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) :substr(md5(microtime()), -$ckey_length)) : '';// 参与运算的密匙$cryptkey = $keya . md5($keya . $keyc);$key_length = strlen($cryptkey);// 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),//解密时会通过这个密匙验证数据完整性// 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) :sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();// 产生密匙簿for ($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}// 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度for ($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}// 核心加解密部分for ($a = $j = $i = 0; $i < $string_length; $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 ($operation == 'DECODE') {// 验证数据有效性,请看未加密明文的格式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 '';}} else {// 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因// 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码return $keyc . str_replace('=', '', base64_encode($result));}
}

看到了另外一种,使用openssl实现的:

// Original PHP code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header.namespace Chirp;class Cryptor
{protected $method = 'aes-128-ctr'; // default cipher method if none suppliedprivate $key;protected function iv_bytes(){return openssl_cipher_iv_length($this->method);}public function __construct($key = FALSE, $method = FALSE){if(!$key) {$key = php_uname(); // default encryption key if none supplied}if(ctype_print($key)) {// convert ASCII keys to binary format$this->key = openssl_digest($key, 'SHA256', TRUE);} else {$this->key = $key;}if($method) {if(in_array(strtolower($method), openssl_get_cipher_methods())) {$this->method = $method;} else {die(__METHOD__ . ": unrecognised cipher method: {$method}");}}}public function encrypt($data){$iv = openssl_random_pseudo_bytes($this->iv_bytes());return bin2hex($iv) . openssl_encrypt($data, $this->method, $this->key, 0, $iv);}// decrypt encrypted stringpublic function decrypt($data){$iv_strlen = 2  * $this->iv_bytes();if(preg_match("/^(.{" . $iv_strlen . "})(.+)$/", $data, $regs)) {list(, $iv, $crypted_string) = $regs;if(ctype_xdigit($iv) && strlen($iv) % 2 == 0) {return openssl_decrypt($crypted_string, $this->method, $this->key, 0, hex2bin($iv));}}return FALSE; // failed to decrypt}}
  use \Chirp\Cryptor;$token = "The quick brown fox jumps over the lazy dog.";$encryption_key = 'CKXH2U9RPY3EFD70TLS1ZG4N8WQBOVI6AMJ5';$cryptor = new Cryptor($encryption_key);// 加密$crypted_token = $cryptor->encrypt($token);unset($token);// 解密$token = $cryptor->decrypt($crypted_token);

php对数字字符串加解密相关推荐

  1. android中使用jni对字符串加解密实现分析

    android中使用jni对字符串加解密实现分析 近期项目有个需求.就是要对用户的敏感信息进行加密处理,比方用户的账户password,手机号等私密信息.在java中,就对字符串的加解密我们能够使用A ...

  2. HJ29 字符串加解密

    描述 1.对输入的字符串进行加解密,并输出. 2.加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该数 ...

  3. 华为机试HJ29: 字符串加解密

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 1.对输入的字符串进行加解密,并输出. 2.加密方法为: 当内容是英文字母时则用该英 ...

  4. RSA+AES数字信封加解密设计

    登录认证.鉴权这些都做好了过后.就开始我们的加密设计了.这里采用了简化数字信封进行加密.首先客户端(浏览器)先请求一份RSA非对称密钥.如果我们采用了openresty或者有能力在nginx开发C模块 ...

  5. 华为OD机试题:字符串加解密

    描述 对输入的字符串进行加解密,并输出. 加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该数字加1, ...

  6. JavaIO流加解密,AES对字符串加解密

    加解密文件? 哈哈哈哈,当然是为了安全,自己的东西不像让别人看见. 1,学了JavaIO流的字节流的读取写入,便可实现. 加密原理: 把文件读取,然后,按某个特定的规则改变其字节写入一个新文件. 解密 ...

  7. sm2格式数字信封加解密详解

    sm2格式数字信封 0.参考链接 密码行业标准化技术委员会http://www.gmbz.org.cn/main/bzlb.html SM2密码算法使用规范http://www.gmbz.org.cn ...

  8. C#常用字符串加解密方法封装

    C#中常用的字符串加密.解密方法封装,包含只加密但不解密的方法.收藏起来备用. 1 //方法一 2 //须添加对System.Web的引用 3 //using System.Web.Security; ...

  9. java 数字信封_本地证书实现数字信封加解密demo-java

    [实例简介] 提供获取加密证书接口.数字信封加密以及数字信封解密接口源码,IDEA编译,测试数据符合标准openssl,测试的时候要注意证书和私钥的存放路径 [实例截图] [核心代码] SealEnv ...

最新文章

  1. python中bool函数的用法_python3实战python函数每日一讲 - bool([x])
  2. Java描述设计模式(13):迭代器模式
  3. Ubuntu下设置环境变量的三种方法
  4. LightGBM大战XGBoost,谁将夺得桂冠?
  5. 深入入门正则表达式(java) - 1 - 入门基础
  6. C++20协程原理和应用
  7. 开始新的学习之旅--PHP开发学习--基础部分笔记
  8. Python出现‘ascii‘ codec can‘t encode characters...的解决方法
  9. 8、二叉树的下一个节点(Python)
  10. 八种点云聚类方法(一)— DBSCAN
  11. 如何批量修改文件后缀
  12. 施一公讲解如何提高阅读英语的能力
  13. 百度导航怎么不显示服务器,win7系统百度首页导航不见了怎么办
  14. php qcloud sdk weapp_qcloud/
  15. 关于kali出现乱码问题
  16. python3 绘制盖尔圆
  17. 常微分方程组之龙格-库塔法
  18. 如何选择适合你的兴趣爱好(四十二),风筝
  19. Linux下7za对rar文件解压失败问题
  20. python同花顺股票实时数据_web实时股票数据展示

热门文章

  1. (十八:2020.10.10)MICCAI 2020 追踪之论文纲要(译)<上>
  2. 昆明理工大学知道计算机答案,昆明理工大学 计算机基础教材参考答案(1-6章)
  3. 删除指定文件夹以及文件下的文件
  4. C# Lambda表达式含义及各种写法
  5. 协程爬取整站豆瓣网络
  6. 重磅:某国产IDE发布,称完全可替代 IntelliJ IDEA,由阿里头制作!​
  7. JS—正则:手机号3+4+4空格格式化
  8. 小白上手 为Kindle添加图书的五种方法
  9. 2020年有寓意的领证日期_2020领证吉日,这些特殊寓意的好日子不能错过
  10. Linux 磁盘管理-分区管理-磁盘修复-断电导致磁盘损坏【fsck】修复异常磁盘