用openssl代替mcrypt加密解密
最近在做钉钉接入的时候,遇到了一些坑。
而mcrypt这个算是最大的了。
问题是这样的。
在钉钉做事件回调的时候,加密发送到钉钉是成功的,但是钉钉发送来的数据解密却是失败的。
Google、百度一堆。解决方案无非以下:
mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB); //更换为 openssl_decrypt($string, 'AES-256-ECB', $key);
但是问题并不是这么简单。
解密依旧失败。
因为在stack overflow上看到过一句话,说MCRYPT_RIJNDAEL_128里的128与 AES-128-CBC里的128并不是一回事,于是,去重新恶补了下AES。。。[1]
在了解了AES之后,依旧没有发现百度出来的结果有什么不对。
于是乎觉得问题还是在openssl上。又经过一轮搜索后,终于对了。
openssl_decrypt($data,'AES-256-CBC', $key ,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
看到OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING了么,重点就在这里。
引用:
[1]维基百科.高级加密标准