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'];
原文地址:https://www.cnblogs.com/zheart/p/12160855.html
- 【前端开发系列】—— 通过鼠标浮动改变样式
- 【设计模式】—— 观察者模式Observer
- 【设计模式】—— 备忘录模式Memento
- 【设计模式】—— 中介者模式Mediator
- 【设计模式】—— 迭代模式Iterator
- 【设计模式】—— 解释器模式Interpret
- 【设计模式】—— 命令模式Commond
- 【设计模式】—— 职责链模式ChainOfResponsibility
- 【设计模式】—— 代理模式Proxy
- 【设计模式】—— 享元模式Flyweight
- 【设计模式】—— 外观模式Facade
- 【设计模式】—— 装饰模式Decorator
- 【设计模式】—— 组合模式Composite
- 【设计模式】—— 桥接模式Bridge
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)
- 机器学习(六)— logistic回归
- 如果简化stm32中printf函数的使用——首先重定向
- TF-IDF算法(2)—python实现
- C语言定义数组时使用枚举作为数组的下标
- 机器学习(七)—回归
- C语言定义数组时使用枚举作为数组的下标 ——c99功能
- C语言——for循环和while循环的效率区别——类似哨兵思想
- 机器学习(八)—Apriori算法
- 机器学习(九)—FP-growth算法
- LeetCode — (1)
- Django初体验——搭建简易blog
- Python开发简单记事本
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
- Python解析excel文件并存入sqlite数据库