rinald_未来往事

PHP7 AES加密解密函数_兼容ios/java/andriod对等加解密

PHP

PHP7 AES对等加解密函数 方法类_兼容ios/java/andriod,支持最新php7.1、7.2等版本

  1. public function cryptAes($key,$iv,$data,$type='encrypt'){
  2. /**其他应用使用AES对等加解密时注意key和iv密钥应为原始密钥值md5后的后16-32位,如:
  3. * acc@2o99对应其他程序调用时key值fc6ff3809a9e77d9(也可以考虑其他程序自行md5)
  4. * acc#21oo对应其他程序调用时iv值68ba6639a5504893(也可以考虑其他程序自行md5)
  5. **/
  6. $key = substr(md5($key),16,32);
  7. $iv = substr(md5($iv),16,32);
  8. $option = OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING;
  9. if($type == 'encrypt'){
  10. $data = json_encode($data);
  11. $data = str_pad($data, 128);
  12. $encrypt_data = openssl_encrypt($data, 'AES-128-CBC', $key, $option, $iv);
  13. return urlencode(base64_encode($encrypt_data));
  14. }else{
  15. $data = urldecode($data);
  16. $decrypt_data = openssl_decrypt(base64_decode($data), 'AES-128-CBC', $key, $option, $iv);
  17. $decrypt_data = json_decode(str_replace("\0","",$decrypt_data),1);
  18. return $decrypt_data;
  19. }
  20. }

调用示例:

  1. $key = 'fity.cn'; // 随意 加解密方法会处理截取md5后的16位
  2. $iv = 'www.fity.cn'; // 随意
  3. //加密
  4. $data = ['id'=>'欢迎来访未来往事博客https://fity.cn',time=>time()];
  5. $this->cryptAes($key,$iv,$data); //$data string/array
  6. //解密:返回值为string/array
  7. $this->cryptAes($key,$iv,$result,'decrypt');

注意: ios/java(android)等对等加解密需要进行urlencode/urldecode处理

附:AES加密解密类文件

  1. <?php
  2. /**
  3. * +---------------------------------------------------------+
  4. * | @Package: cloud
  5. * | @Version: V1.0
  6. * | @Purpose: AES加密解密类文件
  7. * | @PHP Platform support: PHP5.6~7.2(Recommended use new version)
  8. * +---------------------------------------------------------+
  9. * | @Authors: rinald <136654168@qq.com / http://fity.cn>
  10. * | @Create Time: 2017/11/21 08:56
  11. */
  12. namespace Helper;
  13. class CryptAES
  14. {
  15. protected $cipher = 'AES-128-CBC';
  16. protected $key = '';
  17. protected $iv = '';
  18. protected $option = OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING;
  19. function __construct($key,$iv){
  20. $this->key = substr(md5($key),16,32);
  21. $this->iv = substr(md5($iv),16,32);
  22. }
  23. /**
  24. * [encrypt aes加密]
  25. * @param [string/array] $data [要加密的数据]
  26. * @return [string] [加密后的数据]
  27. */
  28. public function encrypt($raw_data)
  29. {
  30. $raw_data = json_encode($raw_data);
  31. $data = str_pad($raw_data, 128);
  32. $encrypt_data = openssl_encrypt($data, $this->cipher, $this->key, $this->option, $this->iv);
  33. return urlencode(base64_encode($encrypt_data));
  34. }
  35. /**
  36. * [decrypt aes解密]
  37. * @param [string] $encrypted_data [要解密的数据]
  38. * @return [string/array] [解密后的数据]
  39. */
  40. public function decrypt($encrypted_data)
  41. {
  42. $encrypted_data = urldecode($encrypted_data);
  43. $decrypt_data = openssl_decrypt(base64_decode($encrypted_data), $this->cipher, $this->key, $this->option, $this->iv);
  44. $decrypt_data = json_decode(str_replace("\0","",$decrypt_data),1);
  45. return $decrypt_data;
  46. }
  47. /**
  48. * 调用示例:(注意:ios/java(android)等对等加解密需要进行urlencode/urldecode)
  49. * $key = 'fity.cn'; // 随意 加解密方法会处理截取md5后的16位
  50. * $iv = 'www.fity.cn'; // 随意
  51. * $ase = new \Helper\CryptAES($key,$iv);
  52. *
  53. * #加密
  54. * $data = ['id'=>'欢迎来访未来往事博客https://fity.cn',time=>time()];
  55. * $result = $aes->encrypt($data); //$data string/array
  56. * #解密:返回值为string/array
  57. * $res = $aes->decrypt($result);
  58. **/
  59. }
原文作者:rinald
原文地址:https://fity.cn/post/649.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。