当前位置: 首页 > news >正文

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

文章目录

  • 小结
  • 问题及解决
    • 获取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?

相关文章:

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

文章目录 小结问题及解决获取secp256r1的公钥和私钥DER格式使用OpenSSL及secp256r1算法获得签名使用OpenSSL及secp256r1算法对签名进行认证 参考 小结 本文记录了使用OpenSSL指令测试椭圆曲线签名算法ECDSA&#xff0c;进行了以下操作&#xff1a;生成椭圆曲线secp256r1 公私密…...

ubuntu之搭建samba文件服务器

1. 在服务器端安装samba程序 sudo apt-get install samba sudo apt-get install smbclient 2.配置samba服务 sudo gedit /etc/samba/smb.conf 在文件末尾追加入以下配置 [develop_share] valid users ancy path /home/ancy public yes writable y…...

P10—P11:Java程序的编译和运行

编译阶段&#xff08;P10&#xff09; Java程序的运行包括两个阶段&#xff1a;编译阶段、运行阶段编译阶段主要任务&#xff1a;对Java源程序&#xff08;以.java为后缀的文件&#xff09;&#xff0c;进行检查其是否符合Java的语法规则。如果符合&#xff0c;则生成字节码文…...

【Docker】Windows中打包dockerfile镜像导入到Linux

【Docker】Windows中打包dockerfile镜像导入到Linux 大家好 我是寸铁&#x1f44a; 总结了一篇【Docker】Windows中打包dockerfile镜像导入到Linux✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天遇到一个新需求&#xff0c;如何将Windows中打包好的dockerfile镜像给迁移…...

数据结构之单链表实现(JAVA语言+C语言)

一、理论 1 单链表结构 2 增、删、查 、改思路 &#xff08;增&#xff09;直接添加放到最后即可。按顺序添加&#xff1a;找到要修改的节点的前一个节点&#xff0c;插入新节点&#xff08;&#xff09;。&#xff08;改&#xff09;要修改的节点修改内容即可。&#xff08;…...

docker 安装Sentinel

1.拉取镜像&#xff1a;docker pull bladex/sentinel-dashboard 2.运行镜像&#xff1a;docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3. 访问地址&#xff1a; 本地地址&#xff1a;http://localhost:8858 (默认端口为8080) 远程地址&#xf…...

通过内网穿透、域名解析实现本地服务部署到公网的架构设计方案

本文主要是总结这些年自己在家玩互联网服务的心得收获, 同时随着年龄增大, 发现脑子确实越来越不好用, 只有记录到笔记中才是真正有意义的。 学生时期做了一些实验, 比如给实验室做日报系统、管理10多台服务器&#xff0c;当时学习了很多架构设计的知识&#xff0c;比如集群化…...

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展&#xff0c;绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大&#xff0c;电竞游戏直播、游戏教程短视频也备受人们喜爱&#xff0c;自然&#xff0c;像游戏陪练、代练行业也随之生长起来&#xff0c;本文就来讲讲&#xff0c;从软件开发角…...

import关键字的使用

- import : 导入 - import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。为了使用定义在其它包中的 Java 类&#xff0c;需用 import 语句来显式引入指定包下所需要的类。相当于 import 语句告诉编译器到哪里去寻找这个类 。 语法格式 …...

江协STM32:点亮第一个LED灯和流水灯

很多单片机都是高电平弱驱动&#xff0c;低电平强驱动&#xff0c;所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作&#xff1a; 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…...

设计模式之建造者模式精讲

也叫生成器模式。将一个复杂的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 在建造者模式中&#xff0c;有如下4个角色&#xff1a; 抽象建造者&#xff08;Builder&#xff09;&#xff1a;用于规范产品的各个组成部分&#xff0c;并进行抽象&…...

vue3源码解析——watch和watchEffect区别

watch和watchEffect是Vue 3.0中新增的两个响应式API&#xff0c;用于监听数据的变化。watch适用于需要获取新值和旧值&#xff0c;或者需要懒执行的场景&#xff0c;而watchEffect适用于需要监听多个数据源&#xff0c;并且需要立即执行的场景。它们之间的区别如下&#xff1a;…...

微服务(基础篇-006-Docker)

目录 初识Docker&#xff08;1&#xff09; Docker解决的问题&#xff08;1.1&#xff09; Docker与虚拟机&#xff08;1.2&#xff09; 镜像和容器&#xff08;1.3&#xff09; Docker和DockerHub&#xff08;1.4&#xff09; docker架构&#xff08;1.5&#xff09; 安…...

深度学习算法概念介绍

前言 深度学习算法是一类基于人工神经网络的机器学习方法&#xff0c;其核心思想是通过多层次的非线性变换&#xff0c;从数据中学习表示层次特征&#xff0c;从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功&#xf…...

查找算法及查找常用数据结构总结

1.顺序表查找 基本方法&#xff1a; 设查找表以一维数组来存储&#xff0c;要求在此表中查找出关键字的值为x的元素的位置&#xff0c;若查找成功&#xff0c;则返回其位置&#xff08;即下标&#xff09;&#xff0c;否则&#xff0c;返回一个表示元素不存在的下标&#xff0…...

大语言模型---强化学习

本文章参考&#xff0c;原文链接&#xff1a;https://blog.csdn.net/qq_35812205/article/details/133563158 SFT使用交叉熵损失函数&#xff0c;目标是调整参数使模型输出与标准答案一致&#xff0c;不能从整体把控output质量 RLHF&#xff08;分为奖励模型训练、近端策略优化…...

前端三剑客 —— CSS (第二节)

目录 内容回顾&#xff1a; CSS选择器*** 属性选择器 伪类选择器 1&#xff09;:link 超链接点击之前 2&#xff09;:visited 超链接点击之后 3&#xff09;:hover 鼠标悬停在某个标签上时 4&#xff09;:active 鼠标点击某个标签时&#xff0c;但没有松开 5&#xff09;:fo…...

牛客NC31 第一个只出现一次的字符【simple map Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*…...

软考系统架构设计师(摘抄)01

架构师承担的责任 系统架构师设计师是承担系统架构设计的核心角色&#xff0c;他不仅是连接用户需求和系统进一步设计与实现的桥梁&#xff0c;也是系统开发早期阶段质量保证的关键角色。系统架构师就是项目的总设计师&#xff0c;他是一个既需要掌控整体又需要洞悉局部瓶颈&a…...

5G无线接入网和接口协议

**部分笔记** 4.3无线协议架构 NR无线协议分为两个平面&#xff1a;用户面和控制面。 用户面&#xff08;UP&#xff09;:协议栈及用户数据采用的协议 控制面(Control Plane&#xff0c;CP)协议栈即系统的控制信令传输采用的协议簇。 虚线标注的是信令数据的流向。一个UE在…...

【力扣刷题日记】1173.即时食物配送I

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1173.即时食物配送I 表&#xff1a;Delivery 列名类型delivery_idintcustomer_idintorder_datedatecustomer…...

2024年github之node排行榜top50

如果有帮助到您还请动动手帮忙点赞&#xff0c;关注&#xff0c;评论转发&#xff0c;感谢啦&#xff01;&#x1f495;&#x1f495;&#x1f495;&#x1f618;&#x1f618;&#x1f618; 本文由Butterfly一键发布工具发布 2024年github之node排行榜top50 语言star项目名称…...

当我们在地址栏输入URL的时候浏览器发生了什么

URL 解析 是否合法 首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词&#xff0c;并且根据你输入的内容进行自动完成、字符编码等操作。检查http缓存 DNS 查询 浏览器缓存 -> 操作系统缓存 -> 路由器缓存 -> DNS缓存 -> 根域名服务器查询 TCP 连接 …...

【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox

目录 前言 Requirements Toolbox 编写需求 需求联接设计 需求跟踪开发进度 追溯性矩阵 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;六&#xff09;——S-Fuction模块&#xff08;TLC&#xff09;》 见《开箱报告&#x…...

Elastic 8.13:Elastic AI 助手中 Amazon Bedrock 的正式发布 (GA) 用于可观测性

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.13 的正式发布。 有什么新特性&#xff1f; 8.13 版本的三个最重要的组件包括 Elastic AI 助手中 Amazon Bedrock 支持的正式发布 (general availability - GA)&#xff0c;新的向量…...

MFC 截取对话框生成图片、截取整个屏幕(可取黑白反色或者整体图片取反色)

HWND hwnd ::GetDesktopWindow();//截整个屏幕&#xff0c;用从这往下4句HDC hdc ::GetDC(hwnd);CDC dc;dc.Attach(hdc);CRect rc,rcw;GetWindowRect(&rcw);GetClientRect(&rc);//只截对话框&#xff0c;用这句//rc.SetRect(0, 0, GetSystemMetrics(SM_CXSCREEN), Ge…...

【LeetCode: 331. 验证二叉树的前序序列化 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

【Consul】Linux安装Consul保姆级教程

【Consul】Linux安装Consul保姆级教程 大家好 我是寸铁&#x1f44a; 总结了一篇【Consul】Linux安装Consul保姆级教程✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天要把编写的go程序放到linux上进行测试Consul服务注册与发现&#xff0c;那怎么样才能实现这一过程&am…...

pytorch常用的模块函数汇总(1)

目录 torch&#xff1a;核心库&#xff0c;包含张量操作、数学函数等基本功能 torch.nn&#xff1a;神经网络模块&#xff0c;包括各种层、损失函数和优化器等 torch.optim&#xff1a;优化算法模块&#xff0c;提供了各种优化器&#xff0c;如随机梯度下降 (SGD)、Adam、RMS…...

素数的计数律:Π函数、歪斜数

相当多的数字&#xff01; 一、说明 自从人类开始掌握最起码的算术概念以来&#xff0c;有一类数字一直处于最前沿——素数。素数定义简单&#xff0c;但难以捕捉&#xff0c;众所周知&#xff0c;素数是数学中一些最困难问题的罪魁祸首&#xff0c;让几代最优秀的数学家感到…...

wordpress pin/51外链代发网

https://www.anquanke.com/post/id/104401 http://blog.nsfocus.net/cve-2018-1273/ http://www.freebuf.com/news/7080.html http://bbs.qcloud.com/thread-49690-1-1.html http://www.cnvd.org.cn/webinfo/show/4247...

文化传媒公司广告宣传/长春网络推广优化

Linux是支持SSH协议的&#xff0c;如果我们在Windows主机上运行的Xshell无法正常连接Linux主机&#xff0c;则首先要考虑的是不是网络不通&#xff0c;如果网络不通就看一下是不是虚拟机设置的模式不对。 其次&#xff0c;如果网络通着却无法连接&#xff0c;则考虑是不是网卡e…...

网站建站无锡/网络优化工程师是干什么的

质数定义&#xff1a;质数&#xff08;prime number&#xff09;又称素数。质数定义为在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数。 示例解决方案1有很多方法可以解决这个问题&#xff0c;下面是一些例子:这是一个不同的功能分解来解决问题。 def get_numb…...

懂的建设网站/企业网站排名优化方案

实验报告课程Java语言程序设计实验名称第八章 Swing图形用户界面程序设计实验任务(三)第页专业班级学号__ __ 姓名实验日期&#xff1a;2010 年11 月9 日报告退发(订正、重做)一、实验目的?布局管理器的使用二、实验环境1、微型计算机一台2、DOS或WINDOWS操作系统&#xff0c;…...

专业做财经直播网站有哪些/百度小说排行榜2019

微信小程序不支持 html 标签,可以使用插件让小程序自动解析 html 标签并且正常显示.推荐组件 wxParse ,github 地址 https://github.com/icindy/wxParse/ 使用浅析: 1. 下载组件 2. 复制 wxParse 文件夹到项目中 3. 在需要解析 html 标签的页面 wxml 引入 wxParse.wxml ,并引…...

景区网站建设的好处/seo营销推广全程实例

2019独角兽企业重金招聘Python工程师标准>>> 解决方法&#xff1a; project->clean 参考链接&#xff1a;https://jingyan.baidu.com/article/cbcede07107d9802f40b4dff.html 转载于:https://my.oschina.net/qimhkaiyuan/blog/2991369...