Ver código fonte

加密和解密

lizhen_gitee 1 ano atrás
pai
commit
49834f8fe6

+ 13 - 13
application/api/controller/Test.php

@@ -13,7 +13,7 @@ class Test extends Api
     protected $noNeedLogin = '*';
     protected $noNeedRight = '*';
 
-    //解密
+    //验签
     public function verifysign(){
 
         //解密签名
@@ -23,13 +23,13 @@ class Test extends Api
         }
         $sign = base64_decode($sign);
 
-        $public_key_str = config('app_rsa.public_key');
-        $public_key = "-----BEGIN PUBLIC KEY-----" .PHP_EOL.
-            wordwrap($public_key_str, 64, PHP_EOL, true) .
-            PHP_EOL."-----END PUBLIC KEY-----";
+        $private_key_str = config('app_rsa.private_key');
+        $private_key = "-----BEGIN RSA PRIVATE KEY-----" .PHP_EOL.
+            wordwrap($private_key_str, 64, PHP_EOL, true) .
+            PHP_EOL."-----END RSA PRIVATE KEY-----";
 
         $signgetdata = ''; //被解密出来的数据
-        openssl_public_decrypt($sign, $signgetdata, $public_key); // 使用私钥解密数据
+        openssl_private_decrypt($sign, $signgetdata, $private_key); // 使用私钥解密数据
         if (!$signgetdata) {
             $this->error('签名错误');
         }
@@ -57,19 +57,19 @@ class Test extends Api
         $request_all = $this->request->request();
 
         unset($request_all['s']);
-        dump($request_all);
+//        dump($request_all);
         ksort($request_all);
-        dump($request_all);
+//        dump($request_all);
         $json_data = json_encode($request_all);
 
-        $private_key_str = config('app_rsa.private_key');
-        $private_key = "-----BEGIN RSA PRIVATE KEY-----\n".
-            wordwrap($private_key_str, 64, "\n", true).
-            "\n-----END RSA PRIVATE KEY-----";
+        $public_key_str = config('app_rsa.public_key');
+        $public_key = "-----BEGIN PUBLIC KEY-----" .PHP_EOL.
+            wordwrap($public_key_str, 64, PHP_EOL, true) .
+            PHP_EOL."-----END PUBLIC KEY-----";
 
 
         $sign = '';
-        openssl_private_encrypt($json_data,$sign,$private_key);
+        openssl_public_encrypt($json_data,$sign,$public_key);
         $sign = base64_encode($sign);
 
         $this->success('获得签名',$sign);

+ 43 - 0
application/common/controller/Api.php

@@ -74,6 +74,9 @@ class Api
     {
         $this->request = is_null($request) ? Request::instance() : $request;
 
+        // 验签
+//        $this->verifysign();
+
         // 控制器初始化
         $this->_initialize();
         //日志
@@ -89,6 +92,46 @@ class Api
         }
     }
 
+    //验签
+    public function verifysign(){
+
+        //解密签名
+        $sign = $this->request->request('sign','','trim');
+        if(empty($sign)){
+            $this->error('缺少签名');
+        }
+        $sign = base64_decode($sign);
+
+        $private_key_str = config('app_rsa.private_key');
+        $private_key = "-----BEGIN RSA PRIVATE KEY-----" .PHP_EOL.
+            wordwrap($private_key_str, 64, PHP_EOL, true) .
+            PHP_EOL."-----END RSA PRIVATE KEY-----";
+
+        $signgetdata = ''; //被解密出来的数据
+        openssl_private_decrypt($sign, $signgetdata, $private_key); // 使用私钥解密数据
+        if (!$signgetdata) {
+            $this->error('签名错误');
+        }
+        dump($signgetdata);
+
+        //接收到的参数
+        $request_all = $this->request->request();
+        unset($request_all['s']);
+        unset($request_all['sign']);
+        ksort($request_all);
+        $request_all = json_encode($request_all);
+        dump($request_all);
+
+        //作对比
+        if($request_all != $signgetdata){
+            $this->error('验签错误');
+        }
+
+        echo '验签正确';
+
+        return true;
+    }
+
     /**
      * 初始化操作
      * @access protected