ECDSA-php 加密解密

时间:2020-01-07
本文章向大家介绍ECDSA-php 加密解密,主要包括ECDSA-php 加密解密使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
 1 <?php  
 2 
 3 class Ecdsa
 4 {
 5     private $alg;
 6 
 7     public function __construct() {
 8         $this->alg = OPENSSL_ALGO_SHA256;
 9     }
10 
11     /**
12      * 加密
13      * @param privateKeyString  私钥
14      * @param message  请求数据(数组)
15      */
16     public function php_encry($privateKeyString = '', $message = []) {
17         $privateKey = openssl_get_privatekey($privateKeyString);
18 
19         $message = json_encode($message, JSON_PRETTY_PRINT);
20 
21         $signature = null;
22         if (openssl_sign($message, $signature, $privateKey, $this->alg)) {
23             $signature = base64_encode($signature);
24             return $signature;
25         } else {
26             return openssl_error_string();
27         }
28     }
29 
30     /**
31      * 验签
32      * @param publicKeyString  公钥
33      * @param message  请求json串
34      * @param signature  base64加密后的字符串
35      */
36     public function php_decry($publicKeyString = '', $message = [], $signature = '') {
37         $publicKey = openssl_get_publickey($publicKeyString);
38 
39         $message = json_encode($message, JSON_PRETTY_PRINT);
40 
41         $return = [
42             'code' => 0,
43             'message' => 'error'
44         ];
45 
46         //验证签名
47         $success = openssl_verify($message, base64_decode($signature), $publicKey, $this->alg);
48         if ($success === -1) {
49             $return['message'] = openssl_error_string();
50             return $return;
51         } elseif ($success === 1) {
52             $return['code'] = 1;
53             $return['message'] = 'success';
54             return $return;
55         } else {
56             $return['message'] = openssl_error_string();
57             return $return;
58         }
59     }
60 }
61 
62 //var_dump(openssl_get_md_methods());die;
63 
64 $ec = new Ecdsa();
65 
66 $private_key = 'MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQglCkOi90fqXJ3u1J0l1RwP0FTfv08
67     LYzSwj+B0vAJq3ehRANCAARu/5R3QWhJ6EBK/UTL7Zg/IP4ixFFZAcMMNnRdwKSopGhwxhksw93F
68     ZeH5f7RUSL8m5rNLrKyIm/AhpOFd2LJe';
69 
70 $privateKeyString =
71 "-----BEGIN EC PARAMETERS-----
72 BgUrgQQACg==
73 -----END EC PARAMETERS-----
74 -----BEGIN EC PRIVATE KEY-----
75 ".$private_key."
76 -----END EC PRIVATE KEY-----";
77 
78 $public_key = 'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbv+Ud0FoSehASv1Ey+2YPyD+IsRRWQHDDDZ0XcCkqKRocMYZLMPdxWXh+X+0VEi/JuazS6ysiJvwIaThXdiyXg==';
79 $publicKeyString =
80 "-----BEGIN PUBLIC KEY-----
81 ".$public_key."
82 -----END PUBLIC KEY-----";
83 
84 $message = '欧阳草帽';
85 
86 $sign = $ec->php_encry($privateKeyString, $message);
87 echo $sign.'<br>';
88 $res = $ec->php_decry($publicKeyString, $message, $sign);
89 echo $res['message'];
View Code

原文地址:https://www.cnblogs.com/zheart/p/12160855.html