首頁  >  問答  >  主體

rsa - openssl_private_decrypt 在typecho Login.php中不生效

我對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也擋不住,只是折騰一下.

漂亮男人漂亮男人2683 天前5079

全部回覆(1)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:16:27

    $private_key的問題,貼的時候把前面的空格資訊也貼了,重新弄了一下可以正常解密了。

    回覆
    0
  • 取消回覆