zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    网络相关要看的
    第四章节 树(2)
    第四章节 树(1)
    第三章节 表,栈,队列
    android动画
    面试
    人工神经网络入门(4) —— AFORGE.NET简介
    Accord.NET Framework 介绍
    DotNet 资源大全中文版
    AI Accord.NET入门
  • 原文地址:https://www.cnblogs.com/zheart/p/12160855.html
Copyright © 2011-2022 走看看