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:
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.
Ini masalah
$private_key
Apabila menampal, saya juga menampal maklumat ruang di hadapannya Selepas melakukannya semula, ia boleh dinyahsulit secara normal.