PHP7使用openssl解密易班API中的用户数据

首页 / PHP / 正文

PHP7使用openssl解密易班API中的用户数据

一、mcrypt扩展解密

  自从PHP版本更新到了7.1以上以后,mcrypt扩展被废弃,使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。

高版本PHP

  然而易班轻应用提供的还是旧版本的mcrypt扩展,这将导致php版本升级到7.1以上的版本会提示没有这个函数,以下是易班文档中心提供的解密代码,使用的加密方式为AES-128-CBC

<?php
  $postObject = addslashes($_GET["verify_request"]);//获取verify_request参数值
  $postStr = pack("H*", $postObject);
  $appID = "";//应用appID
  $appSecret = "";//应用appSecret
  $postInfo = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $appSecret, $postStr, MCRYPT_MODE_CBC, $appID);
  $postInfo = rtrim($postInfo);
?>

二、改为openssl解密

  测试过程中将以上代码使用openssl该写后使用AES-128-CBC解密失败,后将其改为AES-256-CBC后,option选择OPENSSL_RAW_DATA|OPENSSL_NO_PADDING或者1|3均可解密成功(这里测试必须使用2个选项否则解密失败)。

<?php
$data = "5638b78a47bab5db7ec413d2b1dff605fe0782d51683a7cf20b5341c021eb11abb1f057260bf45c6a942a5410c4ee16c17828cc64c7f0cecce722af1ba50921a6b2a1b1b670f690809f20cca10abe17ea87c2d63fb7448f1fbd23173239c2f0017988b06e282436f12315d0524639e9332b9fde760a30e9eecb4a73f8f19890c56923727d02318a0738a9d1f85466d3c0e8d63e3a244fe90dbfa95d0854e2e46ed4bbb800accb6c99af1bc2c0ae5111f0defc78cd76088a0dfe17eec3befa18c91bb5fc4b5c3fe10e659e7e646b9a5ea31c5e1630debddc24c9fa79e60d1c3520781bcb77840692d0c399dc2a7309c545a6fc0786b5aba101377e92bf484efb6";
$postStr = pack("H*", $data);
//16位key密钥
$appID = '5a78142f61c73774';
//32位的iv向量
$appSecret ='d2eb797fd023d049a53a033c1d359971';
$pinfo = openssl_decrypt($postStr,"AES-256-CBC",$appSecret,OPENSSL_RAW_DATA|OPENSSL_NO_PADDING,$appID);
print_r($pinfo);
?>

解密后的结果如下:

{
  "visit_time": 1566317331,
  "visit_user": {
    "userid": "12543770",
    "username": "雨落凋殇",
    "usernick": "雨落凋殇",
    "usersex": "M"
  },
  "visit_oauth": {
    "access_token": "ca2441e60276fab919c12150dd15d9fade201e48",
    "token_expires": "1566922131"
  }
}

三、总结

  经过上面的mcrypt的解密方式AES-128-CBC转换为openssl后必须使用AES-256-CBC才能解密成功。博主也没弄清具体原因。本文如有问题欢迎评论指正!

无标签
评论区
头像
    头像
    凌一
      

    我终于发现了一个比我还懒的博主了 2333 更新比我还慢

      头像
      @凌一

      其实有很多东西想发的,就是懒得发emmm,这就尴尬了

      头像
      @凌一

      哈哈!