zoukankan      html  css  js  c++  java
  • PHP openssl DES加解密

    不说废话上代码

    加密

      $str_padded = 'android'; //要加密的字符串
      $iv = "12345678"; 偏移值 cbc必填 "x01x02x03x04x05x06x07x08"; 如果java或这安卓  用的是byte那么需要改成这样
      $data['code'] = base64_encode(openssl_encrypt($this->pkcsPadding($str_padded,8),'DES-CBC',"33524ddt",OPENSSL_NO_PADDING,$iv)); //加密之后填充,然后base64

    解密

      $decrypted = openssl_decrypt(base64_decode($data['code']), 'DES-CBC', '33524ddt', OPENSSL_NO_PADDING,$iv);
      dump($this->pkcs5_unpad($decrypted));//去掉填充

    /**
    * 填充
    *
    * @param $str
    * @param $blocksize
    * @return string
    */
    private function pkcsPadding($str, $blocksize)
    {
      $pad = $blocksize - (strlen($str) % $blocksize);
      return $str . str_repeat(chr($pad), $pad);
    }

     

    /*
    * 对解密后的已字符填充的明文进行去掉填充字符
    */
    function pkcs5_unpad($text) {
      $pad = ord($text{strlen($text) - 1});
      if ($pad > strlen($text)){
        return false;

      }
      return substr($text, 0, -1 * $pad);
    }

    注:注意和别的语言对接的时候base64加密有差异要注意特殊字符过滤

    注:和java对接的时候 发现java的iv字段是byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }类型 查了好久 最后发现PHp对应的主要 字符串就OK了如下

    注:如果java或这安卓  用的是byte类型那么需要注意是否需要改成 "x01x02x03x04x05x06x07x08"16进制的写法; 

    注:有的JAVA是重写base64,des加密后需要base64下,主要注意 加密后的字符串,按照规律,从左至右,每60个字符你添加一个空格

  • 相关阅读:
    从Pycharm说起
    前端工程师小A学习JS的旅程
    模板引擎开发(一)
    Bootstrap01
    Passbook详解与开发案例
    DLL文件知多少?
    C#中的索引器的简单理解和用法
    python 的列表遍历删除
    Node.js与Golang使用感受与小结1
    解决设计中的两难问题
  • 原文地址:https://www.cnblogs.com/liuxd/p/11419443.html
Copyright © 2011-2022 走看看