首页 > 其他分享 >对称加密和非对称加密

对称加密和非对称加密

时间:2023-10-08 10:00:32浏览次数:29  
标签:AES 加密 rsa 解密 result 对称 非对称 data

1. 对称加密

所谓对称加密就是加密和解密用的是同一个秘钥. 也称为共享密钥加密算法,是一种将明文加密成密文的加密算法。其特点是加密和解密使用相同的密钥,也就是说,密钥是公开的,双方通过协商得到同一个密钥,然后使用该密钥对明文进行加密和解密操作。
对称加密算法的优点是算法简单、加密解密速度快,适合对大量数据进行加密操作,而且加密强度较高,保密性较好。常用的对称加密算法有DES、3DES、AES、RC4等。

(1) AES

是目前最广泛应用的对称加密算法之一,其密钥长度可以是128位、192位或256位,比DES和3DES更安全可靠,而且加密解密速度较快,被广泛应用于各种领域的数据加密保护中。

加密:
"""
长度
    16: *AES-128*
    24: *AES-192*
    32: *AES-256*
MODE 加密模式. 
    常见的ECB, CBC
    ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
    CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
    CFB/OFB:实际上是一种反馈模式,目的也是增强破解的难度。
    FCB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
"""
from Crypto.Cipher import AES
aes = AES.new(b"alexissbalexissb", mode=AES.MODE_CBC, IV=b"0102030405060708")
data = "我吃饭了"
data_bs = data.encode("utf-8")
# 需要加密的数据必须是16的倍数
# 填充规则: 缺少数据量的个数 * chr(缺少数据量个数)
pad_len = 16 - len(data_bs) % 16
data_bs += (pad_len * chr(pad_len)).encode("utf-8")
bs = aes.encrypt(data_bs)
print(bs)

解密:
from Crypto.Cipher import AES
aes = AES.new(b"alexissbalexissb", mode=AES.MODE_CBC, IV=b"0102030405060708")
# 密文
bs = b'\xf6z\x0f;G\xdcB,\xccl\xf9\x17qS\x93\x0e'
result = aes.decrypt(bs)  # 解密
print(result.decode("utf-8"))
(2) DES

是一种比较常见的对称加密算法,它采用64位密钥对数据进行加密,加密和解密使用相同的密钥。但是由于其密钥长度较短,易受到暴力破解等攻击方式的影响,现在已经不再安全。
3DES是在DES基础上发展而来的一种加密算法,使用三个不同的密钥对数据进行三次加密,提高了密码强度,但是加密解密速度较慢。

加密:
from Crypto.Cipher import DES
# key: 8个字节
des = DES.new(b"alexissb", mode=DES.MODE_CBC, IV=b"01020304")
data = "我要吃饭".encode("utf-8")
# # 需要加密的数据必须是16的倍数
# # 填充规则: 缺少数据量的个数 * chr(缺少数据量个数)
pad_len = 8 - len(data) % 8
data += (pad_len * chr(pad_len)).encode("utf-8")
bs = des.encrypt(data)
print(bs)

解密:
des = DES.new(key=b'alexissb', mode=DES.MODE_CBC, IV=b"01020304")
data = b'6HX\xfa\xb2R\xa8\r\xa3\xed\xbd\x00\xdb}\xb0\xb9'
result = des.decrypt(data)
print(result.decode("utf-8"))

2. 非对称加密

非对称加密. 加密和解密的秘钥不是同一个秘钥. 这里需要两把钥匙. 一个公钥, 一个私钥. 公钥发送给客户端. 发送端用公钥对数据进行加密. 再发送给接收端, 接收端使用私钥来对数据解密. 由于私钥只存放在接受端这边. 所以即使数据被截获了. 也是无法进行解密的.

(1) RSA

创建公钥和私钥:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from Crypto import Random
import base64

# 随机
gen_random = Random.new
# 生成秘钥
rsakey = RSA.generate(1024)
with open("rsa.public.pem", mode="wb") as f:
    f.write(rsakey.publickey().exportKey())
with open("rsa.private.pem", mode="wb") as f:
    f.write(rsakey.exportKey())

加密:
data = "我要吃饭了"
with open("rsa.public.pem", mode="r") as f:
    pk = f.read()
    rsa_pk = RSA.importKey(pk)
    rsa = PKCS1_v1_5.new(rsa_pk)
    result = rsa.encrypt(data.encode("utf-8"))
    # 处理成b64方便传输
    b64_result = base64.b64encode(result).decode("utf-8")
    print(b64_result)
    
解密:
data = "e/spTGg3roda+iqLK4e2bckNMSgXSNosOVLtWN+ArgaIDgYONPIU9i0rIeTj0ywwXnTIPU734EIoKRFQsLmPpJK4Htte+QlcgRFbuj/hCW1uWiB3mCbyU3ZHKo/Y9UjYMuMfk+H6m8OWHtr+tWjiinMNURQpxbsTiT/1cfifWo4="
with open("rsa.private.pem", mode="r") as f:
    prikey = f.read()
    rsa_pk = RSA.importKey(prikey)
    rsa = PKCS1_v1_5.new(rsa_pk)
    result = rsa.decrypt(base64.b64decode(data), gen_random)
    print(result.decode("utf-8"))

标签:AES,加密,rsa,解密,result,对称,非对称,data
From: https://www.cnblogs.com/zczhaod/p/17748204.html

相关文章

  • JS逆向实战23 某市wss URL加密+请求头+ws收发
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!本文首发链接为:https://mp.weixin.qq.com/s/o5UCJFhBg-4JFdS0aEwDuw前言在此前。我们先来了解下什么是......
  • 使用BCryptPasswordEncoder类实现数据库密码的加密---简单极了的那种
    1、存储加密的密码,实现数据库加密的操作BCryptPasswordEncoderbCryptPasswordEncoder=newBCryptPasswordEncoder();Stringencode=bCryptPasswordEncoder.encode(password);Useruser=newUser();user.setPassword(encode);2、读取比对数据库信息......
  • 使用SSL证书加密微软远程桌面(本地部署证书)
    之前用微软的远程桌面,但未加密,总感觉差点意思,然后找到了一个大佬的技术教程,亲测可以用,这里做一下备份引用。原作者:李YD原文章:https://blog.csdn.net/a549569635/article/details/48831105/ ......
  • C/C++学习 -- 分组加密算法(DES算法)
    数据加密标准(DataEncryptionStandard,DES)是一种对称密钥加密算法,是信息安全领域的经典之作。本文将深入探讨DES算法的概述、特点、原理,以及提供C语言和C++语言实现DES算法的代码案例。一、DES算法概述DES算法是一种对称密钥加密算法,由IBM于1977年开发并于1977年被美国国家标准局(NI......
  • C/C++学习 -- 流加密算法(RC4算法)
    在信息安全领域,加密算法扮演着至关重要的角色。其中,RC4算法是一种广泛使用的流密码算法,用于数据的保密性和机密性。本文将深入探讨RC4算法的概述、特点、原理,以及提供C语言和C++语言实现RC4算法的代码案例。一、RC4算法概述RC4算法,又称RivestCipher4或Ron'sCode4,是一种流密码(St......
  • 3d: 对称命令(下拉命令)
    想把左图做成右图可编辑多边形内:1.选中————边——————右下---左上拉选竖边2.连接(ctrl+shift+e)3.选中连接的那条线——下拉命令——对称:原理:连接找到元素中点,以此中点为轴,做对称图形,则上下各为原来一半,总长度保持不变参数:Z(沿z轴对称)翻转:对两个元素接触部分做差值......
  • 22.表单提交验证和前端MD5加密
    onclick用这个函数来绑定,onclick表示点击事件,当某个按钮被点击时发生表单加密就是为了在提交表单的时候对用户的个人隐私进行加密处理,利用md5进行加密可以有效避免恶意用户进行抓包来获取用户的隐私functionf(){varzh=document.getElementById('zh');获取zh......
  • 分析一段js加密代码
    源代码(function(){varKBP='',EbW=482-471;functionwHY(r){vary=2043987;varl=r.length;vara=[];for(varg=0;g<l;g++){a[g]=r.charAt(g)};for(varg=0;g<l;g++){varv=y*(g+289)+(y%39401);vart=y*(g+287)+(y%31258);varx=v%l;varp=t%l;varm=a[x];a[x]......
  • OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效
    作者:gentle_zhou原文链接:<https://bbs.huaweicloud.com/blogs/405125>Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新人。随着Web应用程序功能持续增加,复杂性不断提高,这些程序也面临着越来越多的安全威胁和挑战。为了帮助这些应用程......
  • java混淆加密
    1、classFinal插件注:貌似智能加密原生java开发出来的类。<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>&......