PHP openssl DES加解密

2019-08-29 09:01:45来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

PHP openssl DES加解密

不说废话上代码

加密

  $str_padded = 'android'; //要加密的字符串
  $iv = "12345678"; 偏移值 cbc必填 "\x01\x02\x03\x04\x05\x06\x07\x08"; 如果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类型那么需要注意是否需要改成 "\x01\x02\x03\x04\x05\x06\x07\x08"16进制的写法; 

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


原文链接:https://www.cnblogs.com/liuxd/p/11419443.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:静态资源上传至远程ftp服务器,ftp工具类封装

下一篇:tomcat,nginx日志定时清理