rsa - openssl_private_decrypt ne prend pas effet dans typecho Login.php
漂亮男人
漂亮男人 2017-05-16 13:14:27
0
1
5148

Je ne connais pas PHP et ne connais que Java. Je souhaite ajouter le cryptage rsa lors de la soumission du formulaire en typecho, mais une fois les données envoyées en arrière-plan, openssl_private_decrypt ne prend pas effet. ou décrypter. Cela ne fonctionne pas en lançant la démo seule. Question, une partie du code de Login.php (après modification) est la suivante :

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

Le nom d'utilisateur et le mot de passe sont disponibles et ont été vérifiés. Dans la démo, la chaîne déchiffrée est normalement déchiffrée dans le PHP de la démo, mais le code général ne prend pas effet lorsqu'il est déplacé vers typecho. Quelle en est la raison et comment le résoudre.
Environnement d'exploitation : je l'ai essayé à la fois dans un environnement Win et dans une machine virtuelle centos lnmp. J'ai essayé PHP 5.6-7.

Hors sujet : même si, fondamentalement, personne ne piratera mon blog et que la relecture ne peut pas être arrêtée, ce n'est qu'un tirage au sort.

漂亮男人
漂亮男人

répondre à tous(1)
曾经蜡笔没有小新

C'est le problème de $private_key. Lors du collage, j'ai également collé les informations spatiales devant. Après l'avoir refait, elles peuvent être décryptées normalement.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal