区块链:对称加密、非对称加密和数字签名

这篇具有很好参考价值的文章主要介绍了区块链:对称加密、非对称加密和数字签名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇博客仅从区块链的角度介绍加密算法及数字签名,重在使用,至于加密算法的内部原理这里不会详细介绍。

1 对称加密

1.1 定义

  对称加密,指的是信息发送者和接收者通过使用的相同的密钥来完成数据的加密和解密。常用的对称加密算法有:AES、DES、3DES等。

1.2 AES算法

  AES(Advanced Encryption Standard)是目前应用最广泛的加密算法之一。AES算法使用的密钥和数据的长度都是固定的,其中密钥长度可以是128位、192位或256位,数据块长度为128位(这里的位是指bit位,相当于16个字节)。它采用了替代、置换、线性和逻辑运算等步骤进行多轮加密。其Python示例如下:

import base64
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad,unpad

#生出16位的随机密钥,同时也用这个密钥作为偏移量
key=get_random_bytes(16)
iv=key 

#要传输的数据,data的大小超过AES限定的16位
data='今天是2023年06月29日,3天之后Lucy会来看我。'

#加密
AES_obj=AES.new(key,AES.MODE_CBC,iv)
AES_str=AES_obj.encrypt(pad(data.encode('utf-8'),AES.block_size))
#对bytes-like对象进行编码并返回bytes对象
AES_en_str=base64.b64encode(AES_str) 
print("加密后的密文:{}".format(AES_en_str))

#解密
AES_DE_obj=AES.new(key,AES.MODE_CBC,iv)
DE_en_str=unpad(AES_DE_obj.decrypt(AES_str),AES_DE_obj.block_size)
AES_de_str=DE_en_str.decode()
print("解密后的原文:{}".format(AES_de_str))

其结果如下:

加密后的密文:b’ZzLvCA486r8bO3Y5fIbNEUlWaUteS4+Trp4KCIMxaj1mZa6DaGQp70NfK8+759zGl4zS/iKeC5bNlhq1o2EfMQ==’
解密后的原文:今天是2023年06月29日,3天之后Lucy会来看我。

注意,AES中规定的数据块长度位128位,但并意味着AES只能处理长度为128位的数据。只要加密数据的长度为128位的整数倍,AES都可以处理。在上述案例中,data占448位(56个字节),并不是128的整数倍,所以代码里使用pad方法在加密前对data进行填充,使用unpad对解密后得到的原文去除填充。

1.3 对称加密的优缺点

  对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。而缺点主要在于密钥安全和密钥管理两方面。

  • 密钥安全:数据发送方和接受方在数据传输之前,需要商定密钥并严格保存密钥。因为一旦密钥泄露,那么加密的信息则会受到攻击。
  • 密钥管理:每对用户都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理会成为双方的负担。

2 非对称加密

2.1 定义

  非对称加密,主要是依据一组唯一性的密钥完成,即公开密钥和私有密钥。两个密钥之间存在数学关联性,信息发送者使用公钥对数据进行加密后,接收者只可以通过对应的私钥进行解密。在非对称加密中,信息收、发者之间无需进行密钥交换。常用的非加密算法主要有:RSA算法、Diffie-Hellman算法等。

2.2 RSA算法

  RSA算法是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的是绝大多数密码攻击。RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却及其困难,因此可以将乘积公开作为加密密钥。其Python示例如下:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# 生成RSA密钥对
key = RSA.generate(2048)
private_key = key.export_key()  # 获取私钥
public_key = key.publickey().export_key()  # 获取公钥

# 使用公钥加密数据
message = b"Hello, World!"
cipher_rsa = PKCS1_OAEP.new(RSA.import_key(public_key))
encrypted_message = cipher_rsa.encrypt(message)

# 使用私钥解密数据
cipher_rsa = PKCS1_OAEP.new(RSA.import_key(private_key))
decrypted_message = cipher_rsa.decrypt(encrypted_message)

print("原始数据:", message)
print("解密后数据:", decrypted_message)
2.3 非对称加密的优缺点

  非对称加密具有更高的安全性,信息发送方只需要公开自己的公钥,不需要将私钥传给别人。但这种加密算法的加密和解密需要花费太长时间、速度比较慢,一般只用来对少量数据进行加密的。

3 数字签名

3.1 定义

  数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明(保证了区块链的不可抵赖性)。数字签名是非对称加密技术和数字摘要技术的结合,主要包括两种互补的运算:签名和验证。具体如下:

  • 签名:发送信息的一方首先需要计算信息的摘要,然后利用私钥对这个摘要进行加密计算,并附在信息上一起发送给接收方,这样就完成了签名的过程。
  • 验证:接收方接收到附带签名的消息后,同样需要计算消息的摘要,然后用消息发送方对应的公钥对签名进行验证。

  另外,数字摘要技术可以保证如果消息中的任何一位被篡改了都会产生不同的摘要,那么验证就不会通过,这样就保证了区块链消息的不可篡改性。区块链中一般使用哈希函数来实现计算信息的摘要。常用的哈希函数: SHA-256、SHA-1、SHA-3等。

3.2 具体流程

  数字签名的具体计算流程如下:

  • 生成私钥和公钥:可以使用RSA算法生成公钥钥 p k = ( e , m ) pk=(e,m) pk=(e,m)和私sk=(d,n)钥$$。
  • 签名:假设原文为 M M M,使用哈希函数为 H H H M M M加密得到哈希值 H ( M ) H(M) H(M)。接着使用私钥生成签名 S = H ( M ) d m o d   n S=H(M)^{d} mod\space n S=H(M)dmod n
  • 验证:计算 S e m o d   n S^{e} mod \space n Semod n是否等于 H ( M ) H(M) H(M),若相等则验证通过,否则验证不通过。
3.3 Python实现
import hashlib
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import PKCS1_v1_5
from Cryptodome.Hash import SHA256

# 生成RSA密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()

# 准备要签名的数据
data = "Hello, world!".encode('utf-8')

# 使用私钥进行签名
private_key = RSA.import_key(private_key)
signer = PKCS1_v1_5.new(private_key)
signature = signer.sign(SHA256.new(data))

# 使用公钥进行验证
public_key = RSA.import_key(public_key)
verifier = PKCS1_v1_5.new(public_key)
verified = verifier.verify(SHA256.new(data), signature)

if verified:
    print("数字签名验证成功")
else:
    print("数字签名验证失败")

注意:上述代码可以在MAC系统上运行(需要使用pip install命令安装pycryptodomex包);而Windows系统中需要使用pip install 安装pycryptodome包,同时上述代码中Cryptodome改成Crypto.文章来源地址https://www.toymoban.com/news/detail-695396.html

参考文献

  1. https://blog.csdn.net/qq_43427438/article/details/127391033
  2. https://blog.csdn.net/m0_51607907/article/details/123884953

到了这里,关于区块链:对称加密、非对称加密和数字签名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月10日
    浏览(52)
  • 软考:中级软件设计师-信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年04月22日
    浏览(52)
  • 算法2_非对称加密算法之ECDSA(椭圆曲线数字签名算法)

    ECDSA(椭圆曲线数字签名算法) AES(高级加密标准): =对称加密 ​ 对业务数据进行加密,防止他人可以看见 ECDSA(椭圆曲线数字签名算法):=非对称加密算法(公钥和私钥) ​ 验证数据的真实性,防止业务数据被篡改 SHA(安全哈希算法)=哈希算法 1. 作用: 因为ECDSA椭圆曲线数字签名算法获得

    2024年02月02日
    浏览(62)
  • 区块链中使用的加密算法和数字签名算法

    区块链中使用了多种加密算法和数字签名算法来确保数据的安全性、隐私性和可信性。以下是一些常见的加密算法和数字签名算法,它们在区块链技术中的应用: 哈希算法(Hash Functions) : 常见的哈希算法包括 SHA-256(Secure Hash Algorithm 256位)和 SHA-3(Keccak)等。 哈希算法用

    2024年02月04日
    浏览(52)
  • Linux gpg命令(gpg指令、gpg加密工具)(GNU Privacy Guard、GnuPG)文件压缩加密、文件加密、文件解密、文件压缩密码、解压密码、GPG密钥、数字签名、非对称加密

    GNU Privacy Guard (GnuPG或GPG) 是一个完全免费的开源实现,用于OpenPGP标准的数据加密和解密。这种加密方式可以用于保护敏感数据,确保其在传输过程中不被截获或篡改。本文将介绍在Linux环境中如何使用GPG加密工具。 安装gpg 在大多数Linux发行版中,GPG已经预先安装了。 如果未安

    2024年02月03日
    浏览(85)
  • 数字证书:签名证书&加密证书

    数字证书是基于认证机构(可信第三方)实现的,若不懂请复习PKI相关知识,我国为了加强对数据机密性的管控,采用双证书体系(签名证书加密证书),签名密钥对由用户自己产生,而加密密钥对则是由KMC(密钥管理中心)生成。 ———————————————————

    2024年02月08日
    浏览(47)
  • 区块链之数字签名

    区块链中采用对原本信息的哈希值进行加密的方式来进行签名 数字签名:签名和验证 一个消息M、其哈希摘要D 签名者 通过自身的 私钥Kp 生成对应的签名 S=F(D,Kp) 验证者 通过 公钥K 解密 S 得到 消息M的摘要D=F(S,K) 双方通信的时候!!! 公钥加密,私钥解密 私钥签名

    2024年02月13日
    浏览(38)
  • SpringCloudGateway实现数字签名与URL动态加密

    再网络传递数据的时候,为了防止数据被篡改,我们会选择对数据进行加密,数据加密分为对称加密和非对称加密。其中RSA和AES,TLS等加密算法是比较常用的。 对称加密是指加密和解密使用相同的密钥的加密方法。其基本流程包括以下步骤: 密钥生成 : 双方协商生成一个共

    2024年02月07日
    浏览(35)
  • 计算机网络实验之加密、数字签名与证书

    1.对称加密 2.散列函数 3.非对称加密 4.数字签名 5.证书 2.1 对称加密 (1)安装 OpenSSL:登录阿里云服务器,输入命令:“yum install openssl openssl-devel -y”,结果如下图所示,OpenSSL安装成功。 图2.1-1 安装OpenSSL (2)创建lx.txt文件:输入“vi lx.txt”命令创建 lx.txt 文件,并写入“世

    2024年02月08日
    浏览(85)
  • CA与区块链之数字签名详解

    CA与区块链验证本质上都是数字签名,首先,我们看一下什么是数字签名! 数字签名是 公钥密码学 中的一种技术,用于 验证信息的完整性和发送者的身份 。简而言之,数字签名是一种 确认信息来源和信息完整性 的手段。它通常与区块链、数字证书、加密邮件等技术结合使

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包