区块链100篇之对称加密

对称加密

对称加密是比较好理解的,将一个密钥通过加密算法对明文进行运算得到一个密文,使用同样的密钥作为解密算法的输入对密文进行解密即可得到原文,如下图所示:
在这里插入图片描述
从这里我们可以看出对称加密有几个要素,分别是明文、加密算法、密钥、密文以及解密算法,明文即原始数据,密钥与明文一起作为加密算法的输入,是将明文进行打乱的规则,当然它也是跟密文一起作为解密算法的输入。密文自然就是加密算法得到的结果,这些都好理解,这里重点是讲加解密算法及模式。

分类

对称加密可以分为流加密分组加密,流加密即是每次都对数据流中的一个bit或者byte进行加密,加密的过程明文称为明文流,密钥流由密钥流生成器生成,通过加密算法使用密钥流对明文流进行加密得到密文流;流加密比较典型的算法有RC4。

分组加密(通常也成为块加密)是将明文进行分组,加密算法对每个分组分别加密,通常明文分组和加密后得到的密文分组等长。

分组加密

因为分组加密比较常用,所以这里就不介绍流加密了,分组密码常用的有DES、3DES以及AES,分组大小常用的是64bit(8字节)和128bit(16字节),如DES就是使用64bit的分组大小来加密的(其实实际上是56bit,因为DES每隔7bit就会设置一个检查错误的bit),DES的加密过程如下图所示:
在这里插入图片描述
3DES算法很好理解,就是3次DES加解密的组合;AES算法的分组长度是128bit,是目前比较推荐使用的对称加密算法,加解密过程跟DES差不多,就是把64bit改为128bit。

分组密码模式

分组密码的加密模式大致上有ECB、CBC、OFB以及CFB,这里只讲ECB与CBC模式。

ECB模式

在这里插入图片描述
从上图可以看出ECB模式下所有的分组都是并行执行,互不干扰,所以如果有一组加密失败了也不会影响其他分组的加密,这便是ECB模式的优点,但也正是分组之间相互不影响,所以如果增加、删除一个分组或者对几个分组进行重组 ,解密过程还是会正常执行,这就导致了解密出的明文与一开始发送的原文不一致,会干扰接受者对明文的理解;除此之外相同明文会得到相同的密文,导致攻击者可以以此为线索进行破译。

CBC模式

CBC模式就是将明文分组与前一个密文分组进行XOR(按位异或)运算,也就是说下一个明文分组的加密要依赖于前一个密文分组,一组扣一组,所以这种模式也被称为链模式。这种模式下即使是相同的明文也不一定计算出相同的密文,这就弥补了ECB模式的缺点。CBC模式的加密过程如下:
在这里插入图片描述
当然CBC模式也是有缺点的,比如需要引入初始化向量(这个向量的长度与明文分组的长度一致),还有就是它是串行计算,执行效率自然要比ECB模式低,关于CBC的更多细节可以参考这篇文章《CBC模式解读》。

代码操作

下面使用Go语言来对对称加密中的CBC模式(DES算法为例)进行代码演示,为了代码简短有点其中返回的err不进行处理,直接使用"_"来代替。

package main

import (
   "crypto/des"
   "fmt"
   "crypto/cipher"
   "encoding/hex"
   "bytes"
)

func main() {
   
   
在Ubuntu系统上对区块链进行非对称加密,通常涉及到公钥加密和私钥解密的过程,这主要应用于比特币等去中心化应用中的身份验证和交易安全。以下是基本步骤: 1. **安装必要的工具**: 首先,你需要安装`openssl`库,它是处理加密任务的基本工具。可以使用命令行运行: ``` sudo apt-get update sudo apt-get install openssl ``` 2. **生成密钥对**: 使用`openssl`的`genpkey`或`genrsa`命令生成RSA密钥对,例如: ``` openssl genrsa -out private_key.pem 2048 openssl rsa -pubout -in private_key.pem -out public_key.pem ``` 这将创建一个名为`private_key.pem`的私钥文件和一个`public_key.pem`的公钥文件。 3. **管理密钥**: 私钥应该妥善保管,绝不能泄露;公钥则可以公开分发给需要与其通信的人。 4. **加密和解密数据**: 对于数据加密,你可以使用`openssl enc`,如: ``` echo "Your message" | openssl rsautl -encrypt -inkey public_key.pem -out encrypted_message.pem ``` 解密则相反,使用私钥: ``` openssl rsautl -decrypt -inkey private_key.pem -in encrypted_message.pem -out decrypted_message.txt ``` 5. **区块链操作**: 在区块链中,比如以太坊,用户地址(由公钥哈希得出)会被用于接收和发送加密货币。你在智能合约中操作加密数据时,会用到这些密钥来验证交易并保护隐私。 6. **注意安全性**: 定期备份私钥,并确保存储环境的安全。避免在生产环境中直接展示或传输私钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值