怎么使用对称加密算法,公钥加密算法,数字签名算法,公钥证书算法和消息认证算构成一个保密通信系统。对于一个消息使用此系统发送经历怎样的过程。
保密方法
在数据通信中的传统的保密方法是采用通信双方协定的密钥字(定期或不定期变换),在通信开始时先验证对方身份。传输的信号也是经过加密的。
在数据加密法中最有代表性的是美国“数据加密标准”(DES)DES算法本身是公开的知识,但是各厂家生产的设备具体加密方式都各不相同。DES加密方法是用56位密钥字加上8位校验成为64位码字,密钥的变化范围有256种,对明文加密时采用分组移位操作。经过加密任何人企图截取信息用随机试验去解某一密钥事实上是办不到的。DES加密设备是一个插件,装入通信通信双方终端即构成保密通信,使用者并不知道所用密钥内容。当该保密系统工作时,由一随机数字发生器产生密钥,存储在一个电气可消失的存储器内,任何非法的人打开该单元或误用则密钥自动消失。
但是尽管算法复杂,由于设备设计标准化,加密本身也存在标准化问题,既是标准化就有失密可能。同时还存在密钥管理问题,通信双方要有相同密钥,一旦密钥丢失或泄露,或双方失去信任发生争执,就影响通信保密难于解决。所以还需要开发能验证身份的更有效的加密技术。
1976年美国人M.E.Hellman提出了一种公开密钥理论,其基本要领是给每一用户分配一对密钥,其中一个是只有使用者本人掌握秘密密钥,另一个是可以公开的密钥,两个密钥通过算法结成一定的关系。公开密钥只用于加密密钥通过算法结成一定的关系。公开密钥只用于加密,秘密密钥只用于解密,因而要想从一个密钥导出另一个密钥事实上是不可能的,即从数字观点来看,函数是单向的,而且只有惟一的解。这一方法的特点是把经过加密的报文发送出去而无需双方进行密钥互换、分配或同步。
RSA法的操作步骤如下
(1)由发报人用自己的秘密密钥将报文“解密”(即用解密钥加密);
(2)用收报人的公开密钥将被“解密”的报文加密;
(3)收报人先用他自己的秘密密钥解密,然后用发报人的公开密钥“加密”,如能成功地译出原报文,则可以确保报文是真实的,否则对方的签名就是假冒。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
int sum=0;
ListNode* node=new ListNode(0);
ListNode* result=node;
while(l1!=NULL||l2!=NULL)
{
if(l1!=NULL)
{
sum=sum+l1->val;
l1=l1->next;
}
if(l2!=NULL)
{
sum=sum+l2->val;
l2=l2->next;
}
ListNode* temp=new ListNode(sum%10);
node->next=temp;
node=node->next;
sum=sum/10;
}
if(sum>0)
{
ListNode* lastnode=new ListNode(sum);
node->next=lastnode;
}
return result->next;
}
};
对称加密算法使用同一个密钥对消息进行加密和解密。以下是对称加密算法的步骤:
密钥生成:选择一个安全的随机数作为密钥。
密钥分享:将密钥安全地分享给需要通信的各方。
加密:发送方使用密钥将消息进行加密。加密算法将消息和密钥作为输入,并产生加密后的消息作为输出。
解密:接收方使用相同的密钥将加密后的消息进行解密。解密算法将加密后的消息和密钥作为输入,并产生原始消息作为输出。
以下是使用Python代码示例来说明对称加密算法的使用:
import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
# 随机生成一个密钥
key = os.urandom(32)
# 创建对称加密算法的实例
cipher = Cipher(algorithms.AES(key), modes.ECB())
# 创建加密器和解密器
encryptor = cipher.encryptor()
decryptor = cipher.decryptor()
# 要加密的消息
message = b"Hello, World!"
# 加密消息
ciphertext = encryptor.update(message) + encryptor.finalize()
print("加密后的消息:", ciphertext)
# 解密消息
decrypted_message = decryptor.update(ciphertext) + decryptor.finalize()
print("解密后的消息:", decrypted_message)
公钥加密算法使用一对密钥,包括公钥和私钥。以下是公钥加密算法的步骤:
密钥对生成:选择一个安全的随机数对生成公钥和私钥。公钥可以公开分享给其他人,而私钥应严格保密。
加密:发送方使用接收方的公钥将消息进行加密。加密算法将消息和公钥作为输入,并产生加密后的消息作为输出。
解密:接收方使用自己的私钥将加密后的消息进行解密。解密算法将加密后的消息和私钥作为输入,并产生原始消息作为输出。
以下是使用Python代码示例来说明公钥加密算法的使用:
```python from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa, padding
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) public_key = private_key.public_key()
private_key_bytes = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PK