密码学:带密钥的消息摘要算法一数字签名算法
文章目录
- 前言
- 手写签名和数字签名
- 前置知识点:消息摘要算法
- 数字签名算法
- 数字签名算法的由来
- 数字签名算法在实际运用的过程
- 附加:签名和摘要值的解释
- 数字签名算法的家谱
- 数字签名算法的消息传递模型
- 经典数字签名算法-RSA
- 实现
- 数字签名标准算法-DSA
- 实现
- 圆曲线数字签名算法-ECDSA
- 总结
- 参考
前言
在微软 (Microsoft) 、Adobe等软件产品中,我们常常需要输入序列号,那么序列号是什么?它背后用到的技术是什么?它实现算法又是什么?然后什么是数字签名?它和手写的签名又有什么区别和联系?本文将为你揭晓答案。
手写签名和数字签名
相信绝大多数读者朋友都有刷卡购物的经历。刷卡时,我们都要签下自己的名字我们把这种行为简称为“签名”,或者叫做“手写签名”。这种签名几乎与使用者一绑定,成为防止使用者对其行为否认的一种手段。如果使用者对自己的行为表示质疑,可鉴定签名是否一致,判别签名是否有效。
数字签名是手写签名在计算机软件应用中的一种体现,它同样起到了抗否认的作用。手写签名应用于纸质文件,数字签名应用于数据。手写签名针对纸质文件内容确认,数字签名对数据进行摘要处理。两种方式都离不开签名实体,其校验方法也基本一致。
无论是手写签名还是数字签名,如果离开了签名实体(文件或数据)就没有了意义。如果经过手写签名的文件被修改了,我们可以认为该文件无效。同理,经过数字签名的数据可以通过验证签名操作辨别该数据是否被修改。
相信大多数读者朋友都使用过微软的操作系统(如Windows XP),在安装该系统时需要输入一个25位的产品密钥,系统会验证这个产品密钥是否合法,这其实就是一个签名验证的过程。
前置知识点:消息摘要算法
消息摘要是一种通过对任意长度的输入数据进行处理,生成固定长度的输出字符串的算法。它也被称为哈希函数或散列函数。消息摘要具有以下特点:
-
固定长度输出: 无论输入数据的长度如何,消息摘要算法生成的输出都是固定长度的。常见的摘要长度包括128位、256位等。
-
唯一性: 不同的输入数据应该生成不同的摘要。即使输入数据的细微变化,输出的摘要也应该发生明显的变化。这种性质称为抗碰撞性。
-
不可逆性: 由摘要生成原始输入的过程是不可逆的。即使知道摘要值,也应该极其困难(理论上不可能)从摘要值还原出原始输入数据。
-
高效性: 摘要算法应该能够在合理的时间内处理大量数据并生成摘要。
消息摘要在信息安全领域中有多种应用,包括:
-
数据完整性验证: 通过比较发送和接收方计算的消息摘要,可以验证数据是否在传输过程中被篡改。
-
密码学应用: 消息摘要用于生成数字签名、密码学哈希函数等,以确保数据的安全性和不可篡改性。
-
存储密码学: 在存储密码学中,消息摘要常用于存储密码的安全存储,以防止密码泄露后被逆向还原。
一些常见的消息摘要算法包括MD5(较为不安全,不建议使用)、SHA-1(已经被证明不安全)、SHA-256、SHA-3等。在选择摘要算法时,安全性和性能都是需要考虑的因素。SHA-256和SHA-3目前是比较常见且被广泛接受的安全摘要算法。
数字签名算法
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称加密算法和消息摘要算法的结合体。
数字签名算法的由来
数字签名算法是公钥基础设施 (Public Key lnfrastructure,PKI) 以及许多网络安全机制 (SSL/TLS、VPN等)的基础。
数字签名算法要求能够验证数据完整性、认证数据来源,并起到抗否认的作用。这3点与OSI参考模型中的数据完整性服务、认证(鉴别) 服务和抗否认性服务相对应。
消息摘要算法是验证数据完整性的最佳算法,因此,该算法成为数字签名算法中的必要组成部分。
基于数据完整性验证,我们希望数据的发送方(以下称甲方)可以对自己所发送的数据做相应的处理(签名处理),同时给出对应的凭证(签名),并且数据的接收方(以下称乙方)可以验证该签名是否与数据甲方发送的数据相符。
如果任何机构都可以进行签名处理,那签名本身就失去了验证的意义。因此,签名操作只能由甲方来完成,验证签名操作则由乙方来完成。既然签名操作仅限于甲方,那么签名操作本身是基于甲方的某些私有信息完成的操作。并且,用于验证操作的相关信息是由甲方公布给乙方。
用于签名的相关信息私有,用于验证的相关信息公有,且这两种信息必须成对出现。非对称加密算法中的私钥和公钥满足这种关系,成为数字签名算法中的重要元素。
数字签名算法包含签名和验证两项操作,遵循“私钥签名,公钥验证”的签名/验证方式,签名时需要使用私钥和待签名数据,验证时则需要公钥、签名值和待签名数据,其核心算法主要是消息摘要算法。因此,我们可以把数字签名算法近似看成是一种附加了公钥和私钥的消息摘要算法。
与摘要值的表示方式相同,签名值也常以十六进制字符串的形式来表示。
数字签名算法在实际运用的过程
需要注意的是,数字签名算法在实际运用时,通常是先使用消息摘要算法对原始消息做摘要处理,然后再使用私钥对摘要值做签名处理,验证签名时,则使用公钥验证消息的摘要值。
数字签名算法的目的是确保消息的完整性、身份认证和防篡改。在实际运用中,通常采用以下步骤:
-
消息摘要:使用消息摘要算法(如MD5、SHA-1、SHA-256)对原始消息进行摘要处理,生成摘要值。摘要是一个固定长度的字符串,唯一标识了原始消息。
-
签名处理:使用私钥对摘要值进行签名处理。签名处理使用非对称加密算法(如RSA、DSA、ECDSA),其中私钥用于生成签名,确保只有私钥持有者能够生成签名。
-
验证签名:在验证签名时,需要使用公钥对消息摘要值进行验证。公钥是私钥的配对密钥,公钥可以公开给其他人使用。验证过程是通过使用公钥解密签名,得到一个摘要值,与原始消息生成的摘要进行对比。如果二者一致,说明签名是有效的,消息没有被篡改。
通过这样的流程,数字签名算法实现了对消息的加密签名和验证,确保了消息的完整性和身份认证。只有持有私钥的人才能够生成签名,而任何人都可以使用公钥来验证签名。这种机制使得数字签名在网络通信、电子商务等领域被广泛应用。
附加:签名和摘要值的解释
为了更好理解,这里解释一下 签名和摘要值的区别和联系:
区别:
- 摘要值是对原始消息使用摘要算法处理后得到的结果,是一个固定长度的字符串,用于唯一标识原始消息。摘要值的目的是确保消息的完整性,防止消息在传输过程中被篡改。
- 签名是对摘要值使用私钥进行加密得到的结果,也是一个固定长度的字符串。签名的目的是为了确保消息的身份认证,即确认消息是由私钥持有者生成的,防止冒充和伪造。
联系:
- 摘要值是签名的前置步骤:在使用私钥对摘要值进行签名之前,需要首先使用摘要算法对原始消息进行摘要处理。摘要值作为签名的输入之一,保证了签名的可靠性。
- 验证签名时使用摘要值进行对比:在验证签名的过程中,会使用公钥对签名进行解密,得到一个摘要值。然后将原始消息使用相同的摘要算法生成一个摘要值,将两个摘要值进行对比,如果一致,则说明签名是有效的。
签名和摘要值是数字签名算法中密切相关的概念,摘要值保证了消息的完整性,而签名则用于身份认证和防篡改。
数字签名算法的家谱
数字签名算法主要包括RSA、DSA和ECDSA共3种算法。其中,RSA算法源于整数因子分解问题,DSA和ECDSA算法源于离散对数问题。
作为非对称加密算法,RSA算法堪称典型,同样也是数字签名算法中的经典。基于RSA算法密钥,结合消息摘要算法可形成对应的签名算法。如结合消息摘要算法MD5算法,可形成MD5withRSA算法。
DSA算法是继RSA算法后出现的基于DSS的数字签名算法,旨在形成数字签名标准。DSA算法主要为后续数字签名算法的形成奠定基础。
ECDSA算法是椭圆曲线加密算法ECC与DSA算法的结合,相对于传统签名算法,它具有速度快、强度高、签名短等优点,其用途也越来越广泛。
数字签名算法的消息传递模型
我们继续以消息传递模型为例,介绍基于数字签名算法的消息传递模型。
数字签名算法在应用领域的使用较为简单,在密钥处理方面与一般非对称加密算法无异,只是将加密/解密换成了签名/验证。
无论我们将要介绍哪一种数字加密算法,在构建密钥对这一操作中,都与非对称加密算法无异,尤其是与RSA算法完全一致。
在图中,甲方作为消息的发送方,乙方作为消息的接收方。我们假设甲乙双方在消息传递之前已将指定了将要使用的数字签名算法(如RSA算法)。为完成签名验证,甲乙双方需要以下操作:
1)由消息发送的一方构建密钥对,这里由甲方完成
2)由消息发送的一方公布公钥至消息接收方,这里由甲方将公钥公布给乙方
完成这两步操作后,甲方向乙方发送的数据就可以做验证了
图中,甲方向乙方发送数据时需要附加签名,数据与签名形成一则消息发送给接收者。签名与实体(这里指签名前的数据)不可分离,作为一个整体发送给乙方。并且,私钥仅用于签名,公钥仅用于验证。
经典数字签名算法-RSA
RSA算法既是非对称加密算法中的经典,同样也是数字签名算法中的经典。而且在Java语言的世界里,对于RSA算法的支持是最为完整的。
RSA数字签名算法是Diffie和Hellman提出数字签名思想后的第一个数字签名算法,是由Rivest、Shamir和Adleman三人共同完成的,该签名算法源于RSA公钥密码算法的思想,将RSA公钥密码算法按照数字签名的方式运用。RSA数字签名算法是迄今为止应用最为广泛的数字签名算法。
实现
RSA数字签名算法的密钥实现与RSA加密算法一致,算法名称同为“RSA”,密钥产生与转换完全一致。
RSA数字签名算法主要可以分为MD系列和SHA系列两大类。
MD系列主要包括MD2withRSA和 MD5withRSA共 2种 数字签名算法。
SHA系列主要包括SHA1withRSA、SHA224withRSA.SHA256withRSA、SHA384withRSA和SHA512withRSA共 5种数字签名算法。其中,SHA224withRSA.SHA256withRSA、SHA384withRSA和SHA512withRSA这4种数字签名算法需要由第三方加密组件包提供,例如 Bouncy Castle。
Java 6则 只提供了MD2withRSA、MD5withRSA和SHA1withRSA共3种数字签名算法。
有关RSA数字签名算法的Java6实现与Bouncy Castle实现细节如表所示:
数字签名标准算法-DSA
RSA作为经典数字签名算法,很快就成了数字签名算法的研究对象,并逐步转为标准一DSS,并形成了DSA算法,这为后续数字签名算法的提出奠定了基础,如ECDSA (圆曲线数字签名算法)。
1991年,美国国家标准技术协会公布了数字签名标准 ( Digital signatureStandard,DSS),于1994年正式生效,并作为美国联邦信息处理标准。DSS本质上是ElGamal数字签名算法, DSS使用的算法称为数字签名算法 (Digital Signature Algorithm,DSA)。
DSA算法与RSA算法都是数字证书中不可或缺的两种算法。两者不同的是,DSA算法仅包含数字签名算法,使用DSA算法的数字证书无法进行加密通信,而RSA算法既包含加密/解密算法,同时兼有数字签名算法。
实现
Java 6提供了DSA算法实现,在实现层面,我们可以认为DSA算法实现就是RSA数字签名算法实现的简装版。与RSA数字签名算法实现相比,DSA算法仅支持SHA系列的消息摘要算法。Java 6仅支持SHA1withDSA算法,通过Bouncy Castle可以SHA384withDSA和扩 展 SHA224withDSA、SHA256withDSA、SHA512withDSA共4种数字签名算法。
需要注意的是,DSA密钥长度默认为1024位,密钥长度必须是64的倍数,范围在512~1024位之间 (含)。DSA算法的签名长度与密钥长度无关,且长度不唯一。
圆曲线数字签名算法-ECDSA
对微软 (Microsoft) 产品有所了解的读者朋友可能对于这个算法的名称不会太陌生,它正是微软操作系统及办公软件的序列号验证算法。序列号是什么? 正是微软为其软件经过签名得到的签名值!
ECDSA是椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)的缩写。它是一种非对称加密算法,用于确保数字数据的完整性和认证发送方的身份。ECDSA基于椭圆曲线密码学,通过利用椭圆曲线上的数学运算来实现数字签名的生成和验证。
与传统的非对称加密算法(如RSA)相比,ECDSA在相同的安全级别下使用更短的密钥长度,从而提供了更高的性能和更小的资源需求。这使得ECDSA成为许多安全协议和应用程序中的首选选择,特别是在有限的资源环境中,如移动设备和物联网设备。
ECDSA的基本流程包括私钥的签名生成和公钥的验证。签名方使用私钥对消息进行签名,而验证方使用相应的公钥验证签名的有效性。这种算法的安全性基于椭圆曲线离散对数问题,即在椭圆曲线上找到给定点的私钥,从而在实际应用中提供了强大的安全性。
总结
数字签名算法是公钥基础设施 (Public Key Infrastructure,PKI) 以及许多网络安全机制 (SSL/TLS、VPN等) 的基础。数字签名算法包含签名和验证两项操作,遵循“私钥签名,公钥验证”的签名/验证方式,签名时需要使用私钥和待签名数据,其核心算法主要是消息摘要算法。因此,我们可以把数字签名算法近似看成是-种附加了公钥和私钥的消息摘要算法。
数字签名算法主要包括RSA、DSA和ECDSA共3种算法。其中,RSA算法源于整数因子分解问题,DSA和ECDSA算法源于离散对数问题。
RSA算法是数字签名算法中的经典,主要可以分为MD系列和SHA系列两大类。
RSA算法是目前应用最为广泛的非对称加密算法和数字签名算法,在电子商务和产品验证方面均有使用。
DSA算法是继RSA算法后出现的基于DSS的数字签名算法,旨在形成数字签名标准。并且, DSA算法本身不包含任何消息摘要算法。DSA算法主要为后续数字签名算法的形成奠定基础。
Java 提供了DSA算法实现,在实现层面,我们可以认为DSA算法实现就是RSA数字签名算法实现的简装版.
ECDSA算法相对传统签名算法具有速度快、强度高、签名短等优点,其用途也越来越广泛。微软操作系统的25位的产品密钥中就使用了圆曲线签名算法,产品密钥就是签名的十六进制串表示形式。
参考
《Java加密与解密的艺术》
相关文章:
密码学:带密钥的消息摘要算法一数字签名算法
文章目录 前言手写签名和数字签名前置知识点:消息摘要算法数字签名算法数字签名算法的由来数字签名算法在实际运用的过程附加:签名和摘要值的解释 数字签名算法的家谱数字签名算法的消息传递模型经典数字签名算法-RSA实现 数字签名标准算法-DSA实现 圆曲…...
JVM中部分主要垃圾回收器的特点、使用的算法以及适用场景
JVM中部分主要垃圾回收器的特点、使用的算法以及适用场景: Serial GC(串行收集器) 特点:单线程执行,对新生代进行垃圾回收时采用复制算法(Copying),在老年代可能使用标记-压缩或标记…...
vue保姆级教程----深入了解Vuex的工作原理
📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 Ǵ…...
(JAVA)-(网络编程)-InetAddress(ip)
InetAddress类就表示ip地址,他是一个接口,有两个实现类:Inet4Address和Inet6Address,分别表示IPv4和IPv6. 创建对象:此类没有对外提供构造方法,创建ip对象要使用InetAddress类的静态方法getByName()。 st…...
手把手带你死磕ORBSLAM3源代码(二十二)Tracking.cc PrintTimeStats介绍
目录 一.前言 二.代码 2.1完整代码 一.前言 这段代码是一个C++函数,名为Tracking::PrintTimeStats(),它属于Tracking类。这个函数的主要目的是计算和打印出各种跟踪和本地映射任务所花费的平均时间和标准差,并将这些信息同时输出到控制台和一个名为ExecMean.txt的文本文件…...
【操作系统xv6】学习记录3-Wsl2 Ubuntu18.04图形化界面
不知道为啥,wls2和windows用vscode ssh的方式连接识别, 既然如此,那就装一个桌面版的,其实2年多前装过一次,后来pc机跑深度学习的任务,硬盘坏了~ 开干前再试一次 ref:https://zhuanlan.zhihu.…...
CCNP课程实验-03-Route_Path_Control_CFG
目录 实验条件网络拓朴需求 基础配置需求实现1.A---F所有区用Loopback模拟,地址格式为:XX.XX.XX.XX/32,其中X为路由器编号。根据拓扑宣告进对应协议。A1和A2区为特例,A1:55.55.55.0/24,A2:55.55…...
STM32 学习(二)GPIO
目录 一、GPIO 简介 1.1 GPIO 基本结构 1.2 GPIO 位结构 1.3 GPIO 工作模式 二、GPIO 输出 三、GPIO 输入 1.1 传感器模块 1.2 开关 一、GPIO 简介 GPIO(General Purpose Input Output)即通用输入输出口。 1.1 GPIO 基本结构 如下图࿰…...
安卓作业001 - 显示学生信息
文章目录 安卓作业001 - 显示学生信息一、界面设计思路二、涉及知识点概览三、实现步骤详解四、启动应用,查看结果五、任务完成总结 安卓作业001 - 显示学生信息 显示学生详细信息要求更改应用图标及标 题要求设置窗口背景图片 一、界面设计思路 在本次安卓作业0…...
ARM CCA机密计算硬件架构之内存管理
实施了TrustZone安全扩展的Arm A-profile处理器呈现两个物理地址空间(PAS): 非安全物理地址空间安全物理地址空间Realm管理扩展增加了两个PAS: Realm物理地址空间Root物理地址空间下图显示了这些物理地址空间以及如何在工作系统中实施这些空间: 正如表格所示,根状态能够访…...
MySQL--安装与配置与向日葵的基本操作使用
一.MySQL介绍 1.1 MySQL简介 MySQL是一个开源的关系型数据库管理系统,最早由瑞典MySQL AB公司开发。这个数据库系统有着高可靠性、高性能和易用性的特点,在互联网上得到了广泛的应用。MySQL支持SQL语言,可以运行在多种操作系统上,…...
Vue - 多行文本“展开、收起”功能
TextClamp 使用 js 实现文本展开、收起,并非纯 CSS 实现。 Props: fontSize:Number,默认:14lines:Number,默认:1lineHeight:Number,默认:20 F…...
Linux操作系统基础(6):Linux的文件颜色
1. Linux文件颜色 在Linux系统中,文件和目录的颜色是通过终端的配置来实现的,不同的颜色代表不同类型的文件或目录。通常情况下,可以通过 LS_COLORS 环境变量来配置文件和目录的颜色。下面是一些常见的颜色及其代表的含义: 白色…...
LeetCode 1758. 生成交替二进制字符串的最少操作数【字符串,模拟】1353
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
Spring-IOC-xml方式
简介 **控制反转**(Inversion of Control,缩写为**IoC**),是[面向对象编程]中的一种设计原则,可以用来减低计算机[代码]之间的[耦合度]。其中最常见的方式叫做[依赖注入]Dependency Injection,简称DI&#…...
HUAWEI华为荣耀MagicBook X 15酷睿i5-10210U处理器集显(BBR-WAH9)笔记本电脑原装出厂Windows10系统
链接:https://pan.baidu.com/s/1YVcnOP5YKfFOoLt0z706rg?pwdfwp0 提取码:fwp0 MagicBook荣耀原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为/荣耀电脑管家等预装程序 文件格式:esd/wim/swm 安装…...
React使用动态标签名称
最近在一项目里(React antd)遇到一个需求,某项基础信息里有个图标配置(图标用的是antd的Icon组件),该项基础信息的图标信息修改后,存于后台数据库,后台数据库里存的是antd Icon组件…...
Java异常篇----第二篇
系列文章目录 文章目录 系列文章目录前言一、 Excption与Error包结构二、Thow与thorws区别三、Error与Exception区别?四、error和exception有什么区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…...
微服务(1)
目录 1.什么是微服务?谈谈你对微服务的理解? 2.什么是Spring Cloud? 3.Springcloud中的组件有哪些? 3.具体说说SpringCloud主要项目? 5.SpringCloud项目部署架构? 1.什么是微服务?谈谈你对微…...
195.【2023年华为OD机试真题(C卷)】5G 网络建设(最小生成树—JavaPythonC++JS实现)
请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】5G 网络建设(最小生…...
2024年1月1日答案
a)i. V B B V C C 16 V V_{BB} V_{CC} 16V VBBVCC16V R t h R B R E R B R E 10 k Ω 3 k Ω 10 k Ω 3 k Ω ≈ 2.31 k Ω R_{th} \frac{R_B \times R_E}{R_B R_E} \frac{10k\Omega \times 3k\Omega}{10k\Omega 3k\Omega} \approx 2.31k\Omega RthRBR…...
【算法】dp题单
题单链接: https://vjudge.net/contest/574209#overview 目录 1. 洛谷 P1020 导弹拦截 (dp二分Dilworth 定理) 2. P1439 最长公共子序列(二分求最长公共子序列) 3. 洛谷 P1854 花店橱窗布置 (线性dp 用…...
Verilog视频信号图形显示 FPGA(iCE40)
您需要一块带视频输出的 FPGA 板。 我们将在 640x480 下工作,几乎任何视频输出都可以在此像素工作。 它有助于轻松地对 FPGA 板进行编程并相当熟悉 Verilog。 如果您没有开发板,请不要担心,您可以使用 Verilator 模拟器。 材料 Lattice iCE…...
【LeetCode 面试经典150题】26. Remove Duplicates from Sorted Array 在有序数组中移除重复元素
26. Remove Duplicates from Sorted Array 题目大意 Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then …...
linux系统下sql脚本的执行与导出
terminal中执行 执行 mysql -u [username] -p -D [databasename] < [XXX.sql] 导出 mysql -u [username] -p [datbasename] > [XXX.sql] 导出的数据库名自定义。 mysql -u [username] -p [databasename] [tablename] > [xxx.sql] 导出表名自定义 mysql shell 执行 …...
MyBatis学习一:快速入门
前言 公司要求没办法,前端也要了解一下后端知识,这里记录一下自己的学习 学习教程:黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通 文档: https://mybatis.net.cn/index.html MyBatis 快速入门…...
零售业物流这个防漏水技术,居然没有翻车!
随着科技的不断发展,水浸监控系统在各个领域得到了广泛应用。水浸监控不仅仅是为了保护建筑结构和设备,更是为了防范因水灾引起的生命安全和财产损失。 因此,为了有效预防和应对水浸事件,水浸监控系统应运而生,成为各行…...
主浏览器优化之路1——你现在在用的是什么浏览器?Edge?谷歌?火狐?360!?
上一世,我的浏览器之路 引言为什么要用两个浏览器为什么一定要放弃火狐结尾给大家一个猜数字小游戏(测运气) 引言 小时候,我一开始上网的浏览器是2345王牌浏览器吧, 因为上面集成了很多网站,我记得上面有7…...
gitlab请求合并分支
直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口: 仓库控制台的这两个地方都…...
使用Vue3开发学生管理系统模板1
环境搭建 通过解压之前《Vue3开发后台管理系统模板》的代码,我们能够得到用户增删改查的页面,我们基于用户增删改查的页面做进一步的优化。 创建学生增删改查页面 第一步:复制用户增删改查页面,重命名为StudentCRUD.vue <…...
大连手机网站建设/甘肃seo网站
现在的单处理器系统使用指令级的并行机制(ILP)在执行流水线的不同硬件功能中同时执行多条指令。现在的共享内存多处理器系统使用ILP机制,但是还可以利用线程级的并行机制(TLP)。TLP不仅可以允许并行执行指令࿰…...
暗网网站有那些/网时代教育培训机构官网
方法一: 使用join的方法 >>> " ".join(["A","B","C","D"]) A B C D 方法二: 使用字符串格式化拼接 >>> "%ss age is %d" % ("Jerry", 18) "Jerrys age is 18" >>…...
上海html5网站建设/苏州网络推广seo服务
作者:范军 (Frank Fan) 新浪微博:frankfan7核心竞争力,说白了就是一种掌握稀缺资源的能力。你拥有的资源,别人不能很轻易的获得。对于IT技术人而言,我们需要对自己所希望获取的稀缺资源有很清楚…...
市政府网站集约化建设方案/如何做网站推广广告
嵌入式Linux ARM汇编(三)——ARM汇编指令(二)四、ARM存储器访问指令ARM处理器是加载/存储体系结构的典型RISC处理器,对存储器的访问只能用加载和存储指令实现。ARM的加载/存储指令可以实现字、半字、字节操作。1、LDR和STR加载/存储字和无符号字节指令。使用单一数据…...
怎样做网站结构优化/seo关键词搜索优化
来源:http://www.php.cn/csharp-article-359736.html一、过滤器简介 1.1、理解什么是过滤器 1、过滤器(Filters)就是向请求处理管道中注入额外的逻辑。提供了一个简单而优雅的方式来实现横切关注点。 2、所谓的过滤器(Filters&…...
山石网站超市/ui设计公司
我有一个场景,当我点击按钮时,我想要弹出AlertDialog. AlertDialog是一个自定义警报对话框,因为它具有自定义Listview.我使用以下代码分配AlertDialog OnClick按钮top.setOnClickListener(new OnClickListener() {Context mcontext;Overridepublic void onClick(View arg0) {//…...