Rumah  >  Soal Jawab  >  teks badan

rsa - openssl_private_decrypt tidak berkuat kuasa dalam typecho Login.php

Saya pada asasnya tidak tahu PHP dan hanya tahu Java Saya mahu menambah penyulitan rsa semasa menghantar borang dalam typecho Penyulitan bahagian hadapan tidak menjadi masalah, tetapi selepas data dihantar ke latar belakang, openssl_private_decrypt tidak berkuat kuasa. atau nyahsulit. Ia tidak berfungsi apabila menjalankan demo sahaja Soalan, sebahagian daripada kod Login.php (selepas pengubahsuaian) adalah seperti berikut:

<?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);//私钥解密  

Nama pengguna dan kata laluan tersedia dan telah disahkan. Dalam demo, rentetan yang dinyahsulit dinyahsulit secara normal dalam PHP demo, tetapi kod umum tidak berkuat kuasa apabila dialihkan ke typecho Apakah sebabnya dan bagaimana untuk menyelesaikannya.
Persekitaran operasi: Saya telah mencubanya dalam persekitaran menang dan mesin maya centos lnmp. Mencuba php 5.6-7.

Di luar topik: Walaupun pada asasnya tiada siapa yang akan menggodam blog saya, dan ulang tayang tidak boleh dihentikan, ia hanyalah satu lambungan.

漂亮男人漂亮男人2734 hari yang lalu5138

membalas semua(1)saya akan balas

  • 曾经蜡笔没有小新

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

    Ini masalah $private_key Apabila menampal, saya juga menampal maklumat ruang di hadapannya Selepas melakukannya semula, ia boleh dinyahsulit secara normal.

    balas
    0
  • Batalbalas