我对PHP基本不懂,只会java,想在typecho中提交表单的时候添加rsa加密,前台加密没问题,但是数据到后台后openssl_private_decrypt无论无论也不生效 不解密,在单独demo运行的时候没有问题,Login.php部分代码(修改后)如下:
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
* 登录动作
*
* @category typecho
* @package Widget
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
* @version $Id$
*/
/**
* 登录组件
*
* @category typecho
* @package Widget
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
*/
class Widget_Login extends Widget_Abstract_Users implements Widget_Interface_Do
{
/**
* 初始化函数
*
* @access public
* @return void
*/
public function action()
{
// protect
$this->security->protect();
/** 如果已经登录 */
if ($this->user->hasLogin()) {
/** 直接返回 */
$this->response->redirect($this->options->index);
}
/** 初始化验证类 */
$validator = new Typecho_Validate();
$validator->addRule('name', 'required', _t('请输入用户名'));
$validator->addRule('password', 'required', _t('请输入密码'));
/** 截获验证异常 */
if ($error = $validator->run($this->request->from('name', 'password'))) {
Typecho_Cookie::set('__typecho_remember_name', $this->request->name);
/** 设置提示信息 */
$this->widget('Widget_Notice')->set($error);
$this->response->goBack();
}
/** 解密账户密码 **/
$OriginalName = $this->request->name;
$OriginalPassword = $this->request->password;
// 私钥是放在服务器端的,用以验证和解密客户端经过公钥加密后的信息
$private_key = '-----BEGIN RSA PRIVATE KEY-----
(密匙内容)
-----END RSA PRIVATE KEY-----';
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
//$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
$decryptName = "";
$decryptPassword = "";
openssl_private_decrypt(base64_decode(base64_encode($OriginalName)),$decryptName,$pi_key);//私钥解密
openssl_private_decrypt(base64_decode($OriginalPassword),$decryptPassword,$pi_key);//私钥解密
用户名密码都可以拿到,已经验证过。 在demo中,解密后的串在demo的php中正常解密,通用的代码搬到typecho中不生效,请问这是什么原因造成的,如何解决。
运行环境:在win环境下和虚拟机centos lnmp 都试过。php 5.6-7都试过。
题外:虽然基本不会有人黑我博客,而且replay也挡不住,只是折腾一下.
是
$private_key
的问题,粘贴的时候把前面的空格信息也粘贴了,重新弄了一下可以正常解密了。