Heim  >  Fragen und Antworten  >  Hauptteil

rsa – openssl_private_decrypt wird in typecho Login.php nicht wirksam

Ich kenne PHP grundsätzlich nicht und kenne mich nur mit Java aus. Ich möchte die RSA-Verschlüsselung beim Senden des Formulars in typecho hinzufügen. Die Front-End-Verschlüsselung ist kein Problem, aber nachdem die Daten an den Hintergrund gesendet wurden, wird openssl_private_decrypt nicht wirksam oder entschlüsseln. Es funktioniert nicht, wenn die Demo alleine ausgeführt wird. Ein Teil des Codes von Login.php (nach der Änderung) lautet wie folgt:

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

Benutzername und Passwort liegen vor und wurden verifiziert. In der Demo wird der entschlüsselte String normal im PHP der Demo entschlüsselt, aber der allgemeine Code wird nicht wirksam, wenn er nach Typecho verschoben wird. Was ist der Grund dafür und wie kann man das Problem lösen?
Betriebsumgebung: Ich habe es sowohl in der Win-Umgebung als auch in der Centos-LNMP der virtuellen Maschine ausprobiert. Versuchte PHP 5.6-7.

Off-Topic: Obwohl grundsätzlich niemand meinen Blog hacken wird und die Wiedergabe nicht gestoppt werden kann, ist es nur ein Fehler.

漂亮男人漂亮男人2733 Tage vor5136

Antworte allen(1)Ich werde antworten

  • 曾经蜡笔没有小新

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

    $private_key的问题,粘贴的时候把前面的空格信息也粘贴了,重新弄了一下可以正常解密了。

    Antwort
    0
  • StornierenAntwort