浅谈对称加密&&非对称加密

  • 对称加密:加密和解密使用的密钥是同一个
    常见算法:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES
  • 非对称加密:需要两个密钥,一个公开密钥、一个私有密钥
    常见算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

使用过程:
用户A生成非对称加密密钥并将公钥进行公开,用户B接收公钥使用公钥加密信息发送给用户A,加密的信息只有用户A使用私钥进行解密。

  • 反之则是用户B进行生成一对公私密钥

在非对称加密中,用户A生成的一对密钥包括公钥和私钥。如果用户A想要给用户B发送加密信息,应该使用用户B的公钥来加密信息。这是因为非对称加密的特性决定了公钥用于加密,私钥用于解密。

具体步骤如下:

  1. 用户B向用户A发送其公钥。
  2. 用户A使用用户B的公钥对消息进行加密。
  3. 加密后的消息可以安全地发送给用户B。
  4. 用户B使用自己的私钥来解密用户A发送过来的加密消息。

这样,通过使用用户B的公钥,用户A可以确保只有用户B能够解密消息,因为只有用户B拥有与公钥对应的私钥。这种方式保障了加密通信的安全性和可靠性。

数据加密标准AES

使用相同的密钥进行加密和解密的对称加密
支持三种密钥长度:128位、192位和256位。较长的密钥长度提供更高的安全性,但也需要更多的计算资源
然后,对需要加密的数据进行填充(Padding)以确保数据块长度符合AES要求(通常为128位)

注:AES加密是对数据块进行加密,而不是单个数字

假设我们有以下明文数据和密钥:
明文数据:12345678
密钥:0123456789ABCDEF

 1. 选择加密模式:选择一种合适的加密模式,如ECB、CBC等。这里我们选择ECB模式。
 2. 填充方案:将明文数据填充到AES块大小(128位或16字节)的倍数。在这个例子中,明文数据"12345678"长度为8字节,不足一个块大小。我们可以选择使用PKCS#7填充方案,在末尾填充8
    - 8 = 0x08,得到填充后的数据为"1234567808080808"。
 3. 加密:使用AES算法和密钥对填充后的数据进行加密。在这个例子中,我们使用AES-128算法(使用128位的密钥)。将填充后的数据"1234567808080808"和密钥"0123456789ABCDEF"输入AES加密算法,得到密文数据。
 4. 密文:26da32782e5199b78c0f7f046f292ab9

python:
from Crypto.Cipher import AES

def encrypt(plaintext, key):
    cipher = AES.new(key, AES.MODE_ECB)
    ciphertext = cipher.encrypt(plaintext)
    return ciphertext.hex()  # 返回十六进制表示的密文

plaintext = b'1234567808080808'
key = b'0123456789ABCDEF'
ciphertext = encrypt(plaintext, key)
print(ciphertext)

在这里插入图片描述

数据加密标准DES

DES算法采用分组密码技术,将明文分成64位的块,并通过一系列的置换、替换和轮函数操作来加密数据,在DES加密的过程中,消息会经历多轮的加密操作,每轮都会使用不同的子密钥来对数据进行处理

假设要对一个8字节(64位)的消息进行DES加密,比如 "12345678"
首先,需要一个64位的密钥,假设选择的密钥是:"ABCDEFGH"
经过DES加密算法处理后,得到的密文可能是一串十六进制数字:"A2B4F8C9D3E56701"

DES加密算法至少需要执行16轮加密操作,每一轮都使用不同的子密钥对数据进行处理。每一轮中,明文会经历一系列的置换、替换和混合操作
由于DES算法的密钥长度较短(56位),因此现在DES已经被认为不够安全一般都使用AES

数据加密标准RSA

简单说就是公钥加密私钥解密的过程

  • 密钥对生成:
    首先,选择两个大素数p和q,并计算它们的乘积n = p * q。
    接下来,计算欧拉函数φ(n) = (p-1) * (q-1),它表示小于n且与n互质的正整数的数量。
    然后,选择一个整数e,满足1 < e < φ(n),且e与φ(n)互质。这个e将成为公钥的一部分。
    最后,计算一个整数d,满足e * d ≡ 1 (mod φ(n)),即(e * d与φ(n)取模的结果为1)。这个d将作为私钥的一部分。
  • 加密过程:
    发送者使用接收者的公钥(n,e)来加密消息m。具体地,发送者计算密文c = m^e mod n,其中^表示乘方运算。
    发送者将密文c发送给接收者。
  • 解密过程:
    接收者使用自己的私钥(d)来解密收到的密文c。具体地,接收者计算明文m = c^d mod n。
    接收者从解密的明文中提取原始消息。

实际中可能更多的会进行一个填充方案和哈希函数

  • 举例:
选择两个不同的大素数p和q:
p = 61, q = 53

计算n = p * q:
n = 61 * 53 = 3233

计算欧拉函数φ(n) = (p-1)(q-1):
φ(3233) = 60 * 52 = 3120

选择一个与φ(n)互质的整数e:
选择e=17

计算e的模反元素d (即d * e ≡ 1 (mod φ(n))):
d = 2753

公钥为(n, e),私钥为(n, d)。
假设要加密明文"M=123",加密过程如下:

 - 加密:C = m^e mod n
        C = 123^17 mod 3233 = 855
 - 解密:m = c^d mod n
        m=855^2753 mod 3233 = 123
实际中还需要考虑填充方案、数字签名等

填充方案

填充方案通常用于对称加密算法中,因为对称加密算法要求输入的数据长度是固定的,而实际的数据往往不会正好满足这个长度。填充方案用于将数据填充到合适的长度。

  • 常见的填充方案包括:
    PKCS#5和PKCS#7填充:通过在数据末尾填充特定字节来使数据长度符合加密算法的要求。
    Zero padding:在数据末尾补零,使得数据长度符合要求。

将待加密的数据使用选定的填充方案填充至合适的长度。
例如,对于PKCS#7填充,如果需要填充4个字节,那么填充的字节就是0x04 0x04 0x04 0x04。

哈希函数

将任意长度的输入数据映射到固定长度输出的函数。在加密中,哈希函数常用于验证数据的完整性、数字签名(常用非对称加密中)、密码存储等

  • 常见的哈希函数包括:
    SHA-1、SHA-256、SHA-512:安全哈希算法,产生不同长度的哈希值。
    MD5:虽然已经不建议用于安全目的,但仍然在某些场景中被使用。

将数据输入到哈希函数中,得到固定长度的哈希值。
例如,对于SHA-256哈希函数,输入数据后会得到一个256位(32字节)的哈希值。

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值