PHP7使用openssl解密易班API中的用户数据
一、mcrypt扩展解密
自从PHP版本更新到了7.1以上以后,mcrypt扩展被废弃,使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。
然而易班轻应用提供的还是旧版本的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才能解密成功。博主也没弄清具体原因。本文如有问题欢迎评论指正!