使用OpenSSL指令测试椭圆曲线签名算法ECDSA

news/2024/7/27 8:38:44/文章来源:https://blog.csdn.net/scruffybear/article/details/137019209

文章目录

  • 小结
  • 问题及解决
    • 获取secp256r1的公钥和私钥
    • DER格式
    • 使用OpenSSL及secp256r1算法获得签名
    • 使用OpenSSL及secp256r1算法对签名进行认证
  • 参考

小结

本文记录了使用OpenSSL指令测试椭圆曲线签名算法ECDSA,进行了以下操作:生成椭圆曲线secp256r1 公私密钥对,使用OpenSSL指令及secp256r1算法对输入的数据使用私钥获得签名,使用OpenSSL指令对获得的签名对输入的数据使用公钥进行认证。

问题及解决

名词:

  • Elliptic Curve Digital Signature Algorithm (ECDSA)
  • DER (Distinguished Encoding Rules)

获取secp256r1的公钥和私钥

C:\ECDSA_OPenssl_Test>openssl ecparam -name secp256r1 -genkey -noout -out ec-secp256r1-priv-key25Mar2024.pem
using curve name prime256v1 instead of secp256r1C:\ECDSA_OPenssl_Test>

得到一个PEM格式的私钥:

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIEmZBPmaZyg3sPqq9kdKxJq+hFp2POf2fAq0nixBw0HkoAoGCCqGSM49
AwEHoUQDQgAEJuCW8qPsUMEk8NQTaoRUmeOsmsyv4vxlvkFfUw6XZhLXC6TE00c5
VOFefxmSphY7BOy8pYE7Zdu1IjphJ+bO+A==
-----END EC PRIVATE KEY-----

从base 64转化为hex:

30770201010420499904f99a672837b0faaaf6474ac49abe845a763ce7f67c0ab49e2c41c341e4a00a06082a8648ce3d030107a1440342000426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8

查看私钥信息:

C:\ECDSA_OPenssl_Test>openssl ec -in ec-secp256r1-priv-key25Mar2024.pem -noout -text
read EC key
Private-Key: (256 bit)
priv:49:99:04:f9:9a:67:28:37:b0:fa:aa:f6:47:4a:c4:9a:be:84:5a:76:3c:e7:f6:7c:0a:b4:9e:2c:41:c3:41:e4
pub:04:26:e0:96:f2:a3:ec:50:c1:24:f0:d4:13:6a:84:54:99:e3:ac:9a:cc:af:e2:fc:65:be:41:5f:53:0e:97:66:12:d7:0b:a4:c4:d3:47:39:54:e1:5e:7f:19:92:a6:16:3b:04:ec:bc:a5:81:3b:65:db:b5:22:3a:61:27:e6:ce:f8
ASN1 OID: prime256v1
NIST CURVE: P-256

从上可以看到,这里私钥的原始值是499904f99a672837b0faaaf6474ac49abe845a763ce7f67c0ab49e2c41c341e4

可以通过私钥获取公钥:

C:\ECDSA_OPenssl_Test>openssl ec -in ec-secp256r1-priv-key25Mar2024.pem -pubout > ec-secp256r1-pub-key25Mar2024.pem
read EC key
writing EC key

公钥的PEM格式是:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJuCW8qPsUMEk8NQTaoRUmeOsmsyv
4vxlvkFfUw6XZhLXC6TE00c5VOFefxmSphY7BOy8pYE7Zdu1IjphJ+bO+A==
-----END PUBLIC KEY-----

从base 64转化为hex:
3059301306072a8648ce3d020106082a8648ce3d0301070342000426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8

查看公钥:

C:\ECDSA_OPenssl_Test>openssl ec -pubin -in ec-secp256r1-pub-key25Mar2024.pem -noout -text
read EC key
Public-Key: (256 bit)
pub:04:26:e0:96:f2:a3:ec:50:c1:24:f0:d4:13:6a:84:54:99:e3:ac:9a:cc:af:e2:fc:65:be:41:5f:53:0e:97:66:12:d7:0b:a4:c4:d3:47:39:54:e1:5e:7f:19:92:a6:16:3b:04:ec:bc:a5:81:3b:65:db:b5:22:3a:61:27:e6:ce:f8
ASN1 OID: prime256v1
NIST CURVE: P-256

这里的公钥的原始值:26e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8

DER格式

在加解密操作中,也常用DER格式,例如使用编程,或者需要使用openssl指令进行操作

DER (Distinguished Encoding Rules) is a binary encoding for X.509 certificates and private keys.

以下是将一个私钥的PEM格式转换为DER格式:

C:\ECDSA_OPenssl_Test>openssl ec -in ec-secp256r1-pub-key25Mar2024.pem -pubout -outform DER -out ec-secp256r1-pub-key25Mar2024.der
read EC key
writing EC key

下面查看转换为DER格式后的内容:

[john@localhost ~]$ xxd ec-secp256r1-pub-key25Mar2024.der
0000000: 3059 3013 0607 2a86 48ce 3d02 0106 082a  0Y0...*.H.=....*
0000010: 8648 ce3d 0301 0703 4200 0426 e096 f2a3  .H.=....B..&....
0000020: ec50 c124 f0d4 136a 8454 99e3 ac9a ccaf  .P.$...j.T......
0000030: e2fc 65be 415f 530e 9766 12d7 0ba4 c4d3  ..e.A_S..f......
0000040: 4739 54e1 5e7f 1992 a616 3b04 ecbc a581  G9T.^.....;.....
0000050: 3b65 dbb5 223a 6127 e6ce f8              ;e..":a'...
[john@localhost ~]$ xxd -p ec-secp256r1-pub-key25Mar2024.der
3059301306072a8648ce3d020106082a8648ce3d0301070342000426e096
f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d7
0ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6ce
f8
[john@localhost ~]$ 

经过与上面的PEM模式对比,可以发现DER是将PEM的 Base 64格式转换为hex,再以二进制进行存放。

在这里可以查看具体格式:

ECC home: Distinguished Encoding Rules (DER) format

具体结果如下:

DER string: 3059301306072a8648ce3d020106082a8648ce3d0301070342000426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8==Sequence==
--->Sequence (30)--->Obj ID tag (06 - Object ID)ID algorithm: 1.2.840.10045.2.1 ECC (ecPublicKey)--->Obj ID tag (06 - Object ID)ID algorithm: 1.2.840.10045.3.1.7 secp256r1
--->Obj ID tag (03)Bit value:  b'0426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8'Public key: (17584703792196710961322654698934966890779020245800324948422167181519104730642,97267834955915449518105771015666399636648946309220827714919462956391446531832Now checking key if ECC - 256EccKey(curve='NIST P-256', point_x=17584703792196710961322654698934966890779020245800324948422167181519104730642, point_y=97267834955915449518105771015666399636648946309220827714919462956391446531832)-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJuCW8qPsUMEk8NQTaoRUmeOsmsyv
4vxlvkFfUw6XZhLXC6TE00c5VOFefxmSphY7BOy8pYE7Zdu1IjphJ+bO+A==
-----END PUBLIC KEY-----

同样也可以对PEM私钥进行相同的操作:

C:\ECDSA_OPenssl_Test>openssl ec -in ec-secp256r1-priv-key25Mar2024.pem -outform DER -out ec-secp256r1-priv-key25Mar2024.der
read EC key
writing EC key

具体内容如下:

[john@localhost ~]$ xxd ec-secp256r1-priv-key25Mar2024.der
0000000: 3077 0201 0104 2049 9904 f99a 6728 37b0  0w.... I....g(7.
0000010: faaa f647 4ac4 9abe 845a 763c e7f6 7c0a  ...GJ....Zv<..|.
0000020: b49e 2c41 c341 e4a0 0a06 082a 8648 ce3d  ..,A.A.....*.H.=
0000030: 0301 07a1 4403 4200 0426 e096 f2a3 ec50  ....D.B..&.....P
0000040: c124 f0d4 136a 8454 99e3 ac9a ccaf e2fc  .$...j.T........
0000050: 65be 415f 530e 9766 12d7 0ba4 c4d3 4739  e.A_S..f......G9
0000060: 54e1 5e7f 1992 a616 3b04 ecbc a581 3b65  T.^.....;.....;e
0000070: dbb5 223a 6127 e6ce f8                   ..":a'...
[john@localhost ~]$ xxd -p ec-secp256r1-priv-key25Mar2024.der
30770201010420499904f99a672837b0faaaf6474ac49abe845a763ce7f6
7c0ab49e2c41c341e4a00a06082a8648ce3d030107a1440342000426e096
f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d7
0ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6ce
f8
[john@localhost ~]$ 

在ECC home: Distinguished Encoding Rules (DER) format查看具体结果如下:


DER string: 30770201010420499904f99a672837b0faaaf6474ac49abe845a763ce7f67c0ab49e2c41c341e4a00a06082a8648ce3d030107a1440342000426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8==Sequence==
Integer (02):  0x1
--->Sequence (A0)--->Obj ID tag (06 - Object ID)ID algorithm: 1.2.840.10045.3.1.7 secp256r1
--->Sequence (A1)Bit value:  b'0426e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8'

这里的同样验证了公钥的原始值是:26e096f2a3ec50c124f0d4136a845499e3ac9accafe2fc65be415f530e976612d70ba4c4d3473954e15e7f1992a6163b04ecbca5813b65dbb5223a6127e6cef8

使用OpenSSL及secp256r1算法获得签名

假如我们有一个原始数据是: 9702021300197653695F01011D1C27CD01015501C328497412CA97A61476414CF795B9CB8AF68B72F5C2C5BCCC074E5658BE6190B9DBCB4E7CA9AE24A0856E8F9B0F952DBF6609F8

一般会进行SHA256进行哈希运算得到以下结果,可以使用Sha256 online tool: SHA256:5fc6e719bb7a887e32f0c1fc273121a7cc036bb8d3ffa9499821743235a73391

将原始值转换为二进制文件:

[john@localhost ~]$ cat InputData.txt 
9702021300197653695F01011D1C27CD01015501C328497412CA97A61476414CF795B9CB8AF68B72F5C2C5BCCC074E5658BE6190B9DBCB4E7CA9AE24A0856E8F9B0F952DBF6609F8
[john@localhost ~]$ xxd -r -p InputData.txt InputData.bin[john@localhost ~]$ xxd -p InputData.bin
9702021300197653695f01011d1c27cd01015501c328497412ca97a61476
414cf795b9cb8af68b72f5c2c5bccc074e5658be6190b9dbcb4e7ca9ae24
a0856e8f9b0f952dbf6609f8[john@localhost ~]$ xxd InputData.bin 
0000000: 9702 0213 0019 7653 695f 0101 1d1c 27cd  ......vSi_....'.
0000010: 0101 5501 c328 4974 12ca 97a6 1476 414c  ..U..(It.....vAL
0000020: f795 b9cb 8af6 8b72 f5c2 c5bc cc07 4e56  .......r......NV
0000030: 58be 6190 b9db cb4e 7ca9 ae24 a085 6e8f  X.a....N|..$..n.
0000040: 9b0f 952d bf66 09f8                      ...-.f..
[skms@localhost ~]$ 

将哈希值转换为二进制:

[john@localhost ~]$ xxd -r -p sig_hsm_hex.txt sig_hsm_hex.bin[john@localhost ~]$ xxd -p hash_hsm_hex.bin
5fc6e719bb7a887e32f0c1fc273121a7cc036bb8d3ffa9499821743235a7
3391
[john@localhost ~]$ 
[john@localhost ~]$ cat hash_hsm_hex.bin
_���z�~2���'1!��k����I�!t25�3�
[skms@localhost ~]$ xxd hash_hsm_hex.bin
0000000: 5fc6 e719 bb7a 887e 32f0 c1fc 2731 21a7  _....z.~2...'1!.
0000010: cc03 6bb8 d3ff a949 9821 7432 35a7 3391  ..k....I.!t25.3.
[john@localhost ~]$ 

使用私钥ec-secp256r1-priv-key25Mar2024.pem对以上sig_hsm_hex.bin进行签名:

C:\ECDSA_OPenssl_Test>openssl pkeyutl -sign -inkey ec-secp256r1-priv-key25Mar2024.pem -in hash_hsm_hex.bin > sig_sect256.bin

结果如下:

[skms@localhost ~]$ xxd sig_sect256.bin
0000000: 3045 0221 00d9 6013 e128 55f8 5fab 27de  0E.!..`..(U._.'.
0000010: cca2 5215 fc7c 3ad0 bf2c e9ef b4c6 c3ea  ..R..|:..,......
0000020: 896e 1b28 4502 206b ec80 83c4 722a 485b  .n.(E. k....r*H[
0000030: 63ad 37a8 50b9 601b e759 0d79 debe 9468  c.7.P.`..Y.y...h
0000040: da70 d980 e700 a6                        .p.....
[skms@localhost ~]$ xxd -p sig_sect256.bin
3045022100d96013e12855f85fab27decca25215fc7c3ad0bf2ce9efb4c6
c3ea896e1b284502206bec8083c4722a485b63ad37a850b9601be7590d79
debe9468da70d980e700a6
[skms@localhost ~]$ 

进行解析:

C:\ECDSA_OPenssl_Test>openssl asn1parse -in sig_sect256.bin -inform der0:d=0  hl=2 l=  69 cons: SEQUENCE2:d=1  hl=2 l=  33 prim: INTEGER           :D96013E12855F85FAB27DECCA25215FC7C3AD0BF2CE9EFB4C6C3EA896E1B284537:d=1  hl=2 l=  32 prim: INTEGER           :6BEC8083C4722A485B63AD37A850B9601BE7590D79DEBE9468DA70D980E700A6

所以签名的原始值是: D96013E12855F85FAB27DECCA25215FC7C3AD0BF2CE9EFB4C6C3EA896E1B28456BEC8083C4722A485B63AD37A850B9601BE7590D79DEBE9468DA70D980E700A6

使用OpenSSL及secp256r1算法对签名进行认证

以上步骤使用私钥ec-secp256r1-priv-key25Mar2024.pem对以上sig_hsm_hex.bin进行了签名, 那么下面使用OpenSSL指令,使用ec-secp256r1-pub-key25Mar2024.pem公钥对输入sig_hsm_hex.bin内容和签名sig_sect256.bin进行认证。

注意: sig_sect256.bin是二进制文件

以下是对经过哈希SHA256运算后的结果sig_hsm_hex.bin进行直接认证:

C:\ECDSA_OPenssl_Test>openssl pkeyutl -verify -in hash_hsm_hex.bin -sigfile sig_sect256.bin -inkey ec-secp256r1-pub-key25Mar2024.pem -pubin
Signature Verified Successfully

如果输入的是哈希SHA256运算前的原始值,那么可以使用以下指令进行认证:

C:\ECDSA_OPenssl_Test>openssl dgst -sha256 -verify ec-secp256r1-pub-key25Mar2024.pem -signature sig_sect256.bin InputData.bin
Verified OK

以上InputData.bin是是哈希SHA256运算前的原始值(二进制形式):9702021300197653695F01011D1C27CD01015501C328497412CA97A61476414CF795B9CB8AF68B72F5C2C5BCCC074E5658BE6190B9DBCB4E7CA9AE24A0856E8F9B0F952DBF6609F8

参考

Base64 Guru: Base64 to Hex and Hex to Base64
techdocs.akamai.com IoT Token Access Control - Generate ECDSA keys
EC Signature Generate & Verification
Stackoverflow: How to verify a ECC signature with OpenSSL command?
ECC home: Distinguished Encoding Rules (DER) format
Sha256 online tool: SHA256
OID: prime192v1(1) other identifiers: secp192r1, ansiX9p192r1
Hex to ASCII Text String Converter
PEM Parser
OpenSSL: Command Line Elliptic Curve Operations
Stackoverflow: How to verify a ECC signature with OpenSSL command?
Stackoverflow: Openssl command line: how to get PEM for a hex public key, 224 bit curve?
Github: Convert a hex ECDSA private key to PEM format #23258
Full working ECDSA signature with OpenSSL
Stackoverflow: Does OpenSSL -sign for ECDSA apply ASN1 encoding to the hash before signing?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1035234.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python文件处理:解析docx/word文件文字、图片、复选框

前言 因为一些项目原因&#xff0c;我需要提供解析docx内容功能。本来以为这是一件比较简单的工作&#xff0c;没想到在解析复选框选项上吃了亏&#xff0c;并且较长一段时间内通过各种渠道都没有真正解决这一问题&#xff0c;反而绕了远路。 终于&#xff0c;我在github pytho…

HarmonyOS 应用开发之Stage模型启动FA模型PageAbility

本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。 UIAbility启动PageAbility UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。 说明&#xff1a; 需注意FA模型中abilityName由bundleName AbilityName组成&#xff0c;具体见示例。 i…

HarmonyOS 应用开发之Worker

Worker主要作用是为应用程序提供一个多线程的运行环境&#xff0c;可满足应用程序在执行过程中与主线程分离&#xff0c;在后台线程中运行一个脚本操作耗时操作&#xff0c;极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。 Worker运作机制 图1 Worker运作机制示意…

session反序列化漏洞2——ctfshow web263

题目链接 https://ctf.show/challenges#web263-723 解题思路 进去先是一个登录框 目录扫描一下发现存在源码泄露 查看源码 index.php error_reporting(0);session_start();//超过5次禁止登陆if(isset($_SESSION[limit])){$_SESSION[limti]>5?die("登陆失败次数超…

C# 学习第五弹——语句

一、if语句 —简单if语句 —if else 语句 —if else if else 语句 1、简单if语句 if&#xff08;表达式&#xff09;{语句} &#xff08;1&#xff09;表达式必须使用圆括号括起来&#xff1b; &#xff08;2&#xff09;表达式&#xff1a;关系表达式或逻辑表达…

赢了利润失了口碑,众安在线如何打通互联网保险“最后一公里”?

互联网保险自诞生以来&#xff0c;有力弥补了传统保险销售渠道在触达能力、客群转化等方面的不足&#xff0c;经历了以渠道创新为主的1.0阶段和以产品创新为主的2.0阶段后&#xff0c;开始迈入3.0阶段&#xff0c;效率成为行业新基调。 如何提升效率&#xff1f;数字化转型大趋…

day10 java封装性

封装性 为什么有封装性&#xff1f; 为了保护数据不被随意修改&#xff0c;隐藏类的实现细节。增强了代码的安全性和可维护性。 该隐藏隐藏 该暴露暴露 封装性的实现&#xff1f; 让调用者只能通过方法操作属性。可以在方法中加入一些限制条件或数据检查的操作。 封装性的直…

基于boost准标准库的搜索引擎项目

零 项目背景/原理/技术栈 1.介绍boost准标准库 2.项目实现效果 3.搜索引擎宏观架构图 这是一个基于Web的搜索服务架构 客户端-服务器模型&#xff1a;采用了经典的客户端-服务器模型&#xff0c;用户通过客户端与服务器交互&#xff0c;有助于集中管理和分散计算。简单的用户…

用html实现一个手风琴相册设计

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>手风琴相册设计</title><link rel"stylesheet" href"./style.css"> </head> <body> <h1>Accordio…

SQLite中的隔离(八)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite版本3中的文件锁定和并发(七&#xff09; 下一篇&#xff1a;SQLite 查询优化器概述&#xff08;九&#xff09; 数据库的“isolation”属性确定何时对 一个操作的数据库对其他并发操作可见。 数据库连接之…

conda配置完整的pytorch虚拟环境

新建环境 conda create -n py38 python3.8虚拟环境中安装CUDA&#xff0c;conda安装的cudatoolkit和NVIDIA提供的CUDA Toolkit不一样&#xff0c;前者是系统CUDA的子集。在虚拟环境中安装了cudatoolkit&#xff0c;则pytorch就会用虚拟环境中的cudatoolkit进行编译。注意cudato…

java数组与集合框架(二)-- 集合框架,Iterator迭代器,list

集合框架&#xff1a; 用于存储数据的容器。 Java 集合框架概述 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊端&#xff0c;而…

Web3 游戏周报(3.24-3.30)

【3.24-3.30】Web3 游戏行业动态&#xff1a; Web3 开发平台 Mirror World 在 Solana 上推出首个游戏 rollup 链 NFT 卡牌游戏 Parallel 完成 3,500 万美元融资&#xff0c;Solana Ventures 等参投 加密游戏开发公司 Gunzilla Games 完成 3,000 万美元融资 Telegram 游戏 No…

XUbuntu22.04之激活Linux最新Typora版本(二百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Redis高可用与持久化

目录 一、Redis高可用 二、Redis持久化 1、持久化的功能&#xff1a; 2、Redis 提供两种方式进行持久化&#xff1a; 三、RDB持久化 1、触发条件 1.手动触发 2.自动触发 3.其他自动触发机制 2、执行流程 3、启动时加载 四、AOF持久化 1、开启AOF 2、执行流程 1.…

深度学习入门简单实现一个神经网络

实现一个三层神经网络 引言测试数据 代码 引言 今天我们实现一个简单的神经网络 俩个输入神经元 隐藏层两个神经元 一个输出神经元 激活函数我们使用sigmoid 优化方法使用梯度下降 我们前期准备是需要把这些神经元的关系理清楚 x1&#xff1a;第一个输入 x2&#xff1a;第二个…

docker logs 查找日志常用命令

docker logs 是什么 docker logs 是 Docker 命令行工具提供的一个命令&#xff0c;用于查看容器的日志输出。它可以显示容器在运行过程中生成的标准输出&#xff08;stdout&#xff09;和标准错误输出&#xff08;stderr&#xff09;&#xff0c;帮助用户诊断容器的行为和排查…

Netty对Channel事件的处理以及空轮询Bug的解决

继续上一篇Netty文章&#xff0c;这篇文章主要分析Netty对Channel事件的处理以及空轮询Bug的解决 当Netty中采用循环处理事件和提交的任务时 由于此时我在客户端建立连接&#xff0c;此时服务端没有提交任何任务 此时select方法让Selector进入无休止的阻塞等待 此时selectCnt进…

了解与生成火焰图

目录 一、如何看懂火焰图 1、基本特征 2、基本分类 二、如何生成火焰图 1、捕获调用栈 2、折叠栈 3、转换为 svg 格式 4、展示 svg 一、如何看懂火焰图 1、基本特征 &#xff08;1&#xff09;纵轴&#xff1a;即每一列代表一个调用栈&#xff0c;每一个格子代表一个函…

聊聊CSS

css 的介绍 学习目标 能够知道css的作用 1. css 的定义 css(Cascading Style Sheet)层叠样式表&#xff0c;它是用来美化页面的一种语言。 没有使用css的效果图 使用css的效果图 2. css 的作用 美化界面, 比如: 设置标签文字大小、颜色、字体加粗等样式。 控制页面布局, 比如…