欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP openssl 加解密

程序员文章站 2023-11-17 19:39:22
不说废话上代码 加密 $str_padded = 'android'; //要加密的字符串 $iv = "12345678"; 偏移值 cbc必填 $data['code'] = base64_encode(openssl_encrypt($this->pkcsPadding($str_padded ......

不说废话上代码

加密

  $str_padded = 'android'; //要加密的字符串
  $iv = "12345678"; 偏移值 cbc必填
  $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了如下