1. <?php
  2. namespace app\components;
  3. use yii;
  4. class Aes
  5. {
  6. /**
  7. * This was AES-128 / CBC / PKCS5Padding
  8. * return base64_encode string
  9. * @param string $plaintext
  10. * @param string $key
  11. * @return string
  12. */
  13. public static function AesEncrypt($plaintext,$key = null)
  14. {
  15. $plaintext = trim($plaintext);
  16. if ($plaintext == '') return '';
  17. $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
  18.  
  19. //PKCS5Padding
  20. $padding = $size - strlen($plaintext) % $size;
  21. // 添加Padding
  22. $plaintext .= str_repeat(chr($padding), $padding);
  23.  
  24. $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  25. $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
  26. $iv = $key;
  27. // str_repeat($key, $size);
  28. /* Intialize encryption */
  29. mcrypt_generic_init($module, $key, $iv);
  30.  
  31. /* Encrypt data */
  32. $encrypted = mcrypt_generic($module, $plaintext);
  33. /* Terminate encryption handler */
  34. mcrypt_generic_deinit($module);
  35. mcrypt_module_close($module);
  36. return base64_encode($encrypted);
  37. }
  38. /**
  39. * Returns the length of the given string.
  40. * If available uses the multibyte string function mb_strlen.
  41. * @param string $string the string being measured for length
  42. * @return integer the length of the string
  43. */
  44. private static function strlen($string)
  45. {
  46. return extension_loaded('mbstring') ? mb_strlen($string,'8bit') : strlen($string);
  47. }
  48.  
  49. /**
  50. * Returns the portion of string specified by the start and length parameters.
  51. * If available uses the multibyte string function mb_substr
  52. * @param string $string the input string. Must be one character or longer.
  53. * @param integer $start the starting position
  54. * @param integer $length the desired portion length
  55. * @return string the extracted part of string, or FALSE on failure or an empty string.
  56. */
  57. private static function substr($string,$start,$length)
  58. {
  59. return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length);
  60. }
  61. /**
  62. * This was AES-128 / CBC / PKCS5Padding
  63. * @param string $encrypted base64_encode encrypted string
  64. * @param string $key
  65. * @throws CException
  66. * @return string
  67. */
  68. public static function AesDecrypt($encrypted, $key = null)
  69. {
  70. if ($encrypted == '') return '';
  71. $ciphertext_dec = base64_decode($encrypted);
  72. $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
  73. $key=self::substr($key, 0, mcrypt_enc_get_key_size($module));
  74. $iv = $key;
  75. // str_repeat($key, 16); //解密的初始化向量要和加密时一样。
  76. /* Initialize encryption module for decryption */
  77. mcrypt_generic_init($module, $key, $iv);
  78.  
  79. /* Decrypt encrypted string */
  80. $decrypted = mdecrypt_generic($module, $ciphertext_dec);
  81.  
  82. /* Terminate decryption handle and close module */
  83. mcrypt_generic_deinit($module);
  84. mcrypt_module_close($module);
  85. // echo $decrypted;die;
  86. //$a = rtrim($decrypted,"\0");
  87. return rtrim($decrypted,"\0");
  88. }
  89. }

Aes CBC加密的更多相关文章

  1. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  2. 【java工具】AES CBC加密

    一.定义 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先 ...

  3. java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

    在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...

  4. AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码

    一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...

  5. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

  6. AES/CBC/PKCS7Padding加密方式

    在网上找了大半天资料,终于找到一个可以用的 public static class AES { // 算法名称 final static String KEY_ALGORITHM = "AE ...

  7. linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法

    用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖,用的依赖是: <dependency> ...

  8. php AES cbc模式 pkcs7 128位加密解密(微信小程序)

    PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '12345 ...

  9. php实现AES/CBC/PKCS5Padding加密解密(又叫:对称加密)

    今天在做一个和java程序接口的架接,java那边需要我这边(PHP)对传过去的值进行AES对称加密,接口返回的结果也是加密过的(就要用到解密),然后试了很多办法,也一一对应了AES的key密钥值,偏 ...

随机推荐

  1. 变量类型-Number

    教程:一:数字类型 (1)int 没有限制大小,有以下的四种表现形式:        1:2进制:以'0b'开头---bin        2:8进制:以'0o'开头---oct        3:1 ...

  2. java学习(四)--- String 、StringBuffer、StringBuilder 和 数组

    对于 String.StringBuffer.StringBuilder比较一下 主要说说三者的不同 String 长度大小不可变 StringBuffer 和 StringBuilder 长度可变 ...

  3. javascript的数组之reduce()

    reduce()方法对累加器和数组中的每个元素(从左到右)应用到一个函数中,最终得到一个值并返回 const array1 = [1, 2, 3, 4]; const reducer = (accum ...

  4. Win7 IIS配置

    一.首先,在开始打开你的控制面板 二.进入到控制面板,选择程序和功能,点击进入 三.在程序与功能中,左菜单栏,打开你的Windows工能 四.在Windows工能中,把你的Internet信息服务中的 ...

  5. python语法_str_eval

    dict1 = {} a = str(dict1) type(a) = 字符串 b = eval(a) type(b) = 字典

  6. Head First Python-Python简单处理文件

    前面介绍了自定义格式化输出列表函数printList(),下面再介绍下格式化列表项及列表项的排序. 这里有一组列表数据,记录运动员跑步时间的,要求按照时间大小进行排序.这里每项数据记录的时间格式不一样 ...

  7. Go笔记

    #Go在win下安装 1. https://golang.google.cn/dl/下载 amd64 版本的zip包 2. 解压后将bin目录添加入path 3. go version可显示版本信息

  8. vue 基础的一些字眼及路由

    每个框架都有一些自己的写法和一些字眼 摘自 vue 官网 v-bind 缩写 <!-- 完整语法 --> <a v-bind:href="url">...& ...

  9. XXL-JOB之本地环境搭建

    一.源码下载 1.官网地址 登录以下地址查看详细搭建步骤: https://www.cnblogs.com/xuxueli/p/5021979.html 2.下载源码 根据1中打开的页面,下载源码,如 ...

  10. Eclipse集成Hadoop插件

    一.Eclipse集成Hadoop插件 1.在这之前我们需要配置真机上的hadoop环境变量 注:在解压tar包的时候普通解压会出现缺文件的现象,所以在这里我们需要用管理员的方式启动我们的解压软件(我 ...