赞
踩
在当今数字化时代,信息的传递和存储成为了日常生活和商业活动的重要组成部分。然而,随之而来的安全威胁也愈发严重,为了保护敏感信息免受恶意攻击,非对称加密技术应运而生。本文将深入探讨非对称加密的基本含义、原理、起源,以及与对称加密的对比,旨在为读者提供对这一关键安全领域的深入了解。
非对称加密,又称为公钥加密,采用了一对密钥,分别是公钥和私钥。与对称加密不同的是,这两个密钥是相关联的,但彼此之间不可逆推。数据加密时,使用公钥加密,而解密则需要相应的私钥。这种加密方式有效地解决了密钥传递的难题,成为了安全通信的基石。
非对称加密基于数学上的一些难解问题,例如大数分解。其核心原理可以简单概括为:容易进行加密,难以进行解密。公钥用于加密,私钥用于解密,使得即便公钥泄露,攻击者也无法逆推出私钥,从而保障了信息的安全性。
非对称加密最早由英国数学家克里福德·考克斯(Clifford Cocks)在1973年提出,但直到1977年,美国数学家罗纳德·李维斯特(Ronald Rivest)、阿迪·萨莫尔(Adi Shamir)、伦纳德·阿德曼(Leonard Adleman)提出的RSA算法,非对称加密才开始进入大众视野。自此以后,非对称加密经过多次改进和演化,形成了今天广泛应用的多种算法,如DSA、ECC等。
相较于对称加密,非对称加密的一大优势在于密钥的管理。对称加密需要在通信双方之间共享同一密钥,而非对称加密通过公钥和私钥的组合,避免了这一问题。此外,非对称加密还能够提供数字签名和数字证书等功能,进一步增强了通信的安全性。
然而,非对称加密也存在一些缺点,主要体现在计算成本较高和加密速度相对较慢。因此,在实际应用中,通常会将非对称加密与对称加密结合使用,发挥各自的优势,达到更好的安全性和效率平衡。
非对称加密的基本运行过程可以简单概括为以下几个步骤:
密钥生成: 用户生成一对公钥和私钥,并将公钥传播给通信对方,私钥保留在本地。
加密: 发送方使用接收方的公钥对信息进行加密,并发送给接收方。
传输: 加密后的信息通过不安全的通道传输。
解密: 接收方使用自己的私钥对接收到的信息进行解密,获取原始信息。
通过以上步骤,通信双方能够在不共享密钥的情况下进行安全的信息传递。
http的传输层用的是tcp;
https用的是tls(加密)。
请求http://woniuxy.com,会重定向到https
后面的数据就可以通过S_key(对称密钥)进行加密了。
- #服务器端
- import socket
- import random
- from cryptography.hazmat.primitives import serialization
- from cryptography.hazmat.primitives.asymmetric import rsa, padding
- from cryptography.hazmat.backends import default_backend
- from cryptography.hazmat.primitives import hashes
-
- # 创建RSA密钥对
- private_key_server = rsa.generate_private_key(
- public_exponent=65537,
- key_size=2048,
- backend=default_backend()
- )
- public_key_server = private_key_server.public_key()
-
- # 将公钥序列化为字节串,以便发送给客户端
- public_key_bytes = public_key_server.public_bytes(
- encoding=serialization.Encoding.PEM,
- format=serialization.PublicFormat.SubjectPublicKeyInfo
- )
-
- # 创建服务器socket
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server_socket.bind(('127.0.0.1', 12345))
- server_socket.listen(1)
-
- # 接受客户端连接
- print("Server is listening...")
- connection, client_address = server_socket.accept()
-
- # 发送公钥给客户端
- connection.sendall(public_key_bytes)
-
- # 接收客户端发送的随机数
- random_number = connection.recv(1024)
- print("Received random number from client:", random_number.decode())
-
- # 使用私钥对随机数进行签名
- signature = private_key_server.sign(
- random_number,
- padding.PSS(
- mgf=padding.MGF1(hashes.SHA256()),
- salt_length=padding.PSS.MAX_LENGTH
- ),
- hashes.SHA256()
- )
-
- # 发送签名给客户端
- connection.sendall(signature)
-
- # 关闭连接
- connection.close()
- server_socket.close()

- #客户端
- import socket
- import random
- from cryptography.hazmat.primitives import serialization
- from cryptography.hazmat.primitives.asymmetric import rsa, padding
- from cryptography.hazmat.backends import default_backend
- from cryptography.hazmat.primitives import hashes
-
- # 创建客户端socket
- client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- # 连接服务器
- client_socket.connect(('127.0.0.1', 12345))
-
- # 接收服务器发送的公钥
- public_key_bytes = client_socket.recv(1024)
-
- # 将服务器发送的公钥反序列化为RSA公钥对象
- public_key_server = serialization.load_pem_public_key(
- public_key_bytes,
- backend=default_backend()
- )
-
- # 生成随机数
- random_number = str(random.randint(1, 1000)).encode()
-
- # 发送随机数给服务器
- client_socket.sendall(random_number)
-
- # 接收服务器发送的签名
- signature = client_socket.recv(1024)
- print("Received signature from server:", signature.hex())
-
- # 使用服务器公钥验证签名
- try:
- public_key_server.verify(
- signature,
- random_number,
- padding.PSS(
- mgf=padding.MGF1(hashes.SHA256()),
- salt_length=padding.PSS.MAX_LENGTH
- ),
- hashes.SHA256()
- )
- print("Signature verification successful.")
- except:
- print("Signature verification failed.")
-
- # 关闭连接
- client_socket.close()

非对称加密作为信息安全的基石,在当今互联网时代扮演着不可替代的角色。通过深入了解其基本含义、原理、起源以及与对称加密的对比,我们能够更好地理解其在保障通信安全方面的价值。随着科技的不断进步,非对称加密算法也将不断演进,为信息安全提供更为坚固的保障。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。