保密通信系统的运行过程

怎么使用对称加密算法,公钥加密算法,数字签名算法,公钥证书算法和消息认证算构成一个保密通信系统。对于一个消息使用此系统发送经历怎样的过程。

保密方法
在数据通信中的传统的保密方法是采用通信双方协定的密钥字(定期或不定期变换),在通信开始时先验证对方身份。传输的信号也是经过加密的。
在数据加密法中最有代表性的是美国“数据加密标准”(DES)DES算法本身是公开的知识,但是各厂家生产的设备具体加密方式都各不相同。DES加密方法是用56位密钥字加上8位校验成为64位码字,密钥的变化范围有256种,对明文加密时采用分组移位操作。经过加密任何人企图截取信息用随机试验去解某一密钥事实上是办不到的。DES加密设备是一个插件,装入通信通信双方终端即构成保密通信,使用者并不知道所用密钥内容。当该保密系统工作时,由一随机数字发生器产生密钥,存储在一个电气可消失的存储器内,任何非法的人打开该单元或误用则密钥自动消失。
但是尽管算法复杂,由于设备设计标准化,加密本身也存在标准化问题,既是标准化就有失密可能。同时还存在密钥管理问题,通信双方要有相同密钥,一旦密钥丢失或泄露,或双方失去信任发生争执,就影响通信保密难于解决。所以还需要开发能验证身份的更有效的加密技术。
1976年美国人M.E.Hellman提出了一种公开密钥理论,其基本要领是给每一用户分配一对密钥,其中一个是只有使用者本人掌握秘密密钥,另一个是可以公开的密钥,两个密钥通过算法结成一定的关系。公开密钥只用于加密密钥通过算法结成一定的关系。公开密钥只用于加密,秘密密钥只用于解密,因而要想从一个密钥导出另一个密钥事实上是不可能的,即从数字观点来看,函数是单向的,而且只有惟一的解。这一方法的特点是把经过加密的报文发送出去而无需双方进行密钥互换、分配或同步。
RSA法的操作步骤如下
(1)由发报人用自己的秘密密钥将报文“解密”(即用解密钥加密);
(2)用收报人的公开密钥将被“解密”的报文加密;
(3)收报人先用他自己的秘密密钥解密,然后用发报人的公开密钥“加密”,如能成功地译出原报文,则可以确保报文是真实的,否则对方的签名就是假冒。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7571880
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写一个函数,求两个整数的最大公约数,用 主函数调用这个函数并输出结果,两个整数由键盘 输入。(提示:用辗转相除法求最大公约数)
  • 除此之外, 这篇博客: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示,,,中的 源代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    /**
     * 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;
        }
    };
    
  • 您还可以看一下 吴刚老师的【吴刚大讲堂】电商应用界面设计课程中的 列表页视觉设计的文案梳理方法小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    使用对称加密算法(例如AES)的使用:

    对称加密算法使用同一个密钥对消息进行加密和解密。以下是对称加密算法的步骤:

    1. 密钥生成:选择一个安全的随机数作为密钥。

    2. 密钥分享:将密钥安全地分享给需要通信的各方。

    3. 加密:发送方使用密钥将消息进行加密。加密算法将消息和密钥作为输入,并产生加密后的消息作为输出。

    4. 解密:接收方使用相同的密钥将加密后的消息进行解密。解密算法将加密后的消息和密钥作为输入,并产生原始消息作为输出。

    以下是使用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)
    

    公钥加密算法(例如RSA)的使用:

    公钥加密算法使用一对密钥,包括公钥和私钥。以下是公钥加密算法的步骤:

    1. 密钥对生成:选择一个安全的随机数对生成公钥和私钥。公钥可以公开分享给其他人,而私钥应严格保密。

    2. 加密:发送方使用接收方的公钥将消息进行加密。加密算法将消息和公钥作为输入,并产生加密后的消息作为输出。

    3. 解密:接收方使用自己的私钥将加密后的消息进行解密。解密算法将加密后的消息和私钥作为输入,并产生原始消息作为输出。

    以下是使用Python代码示例来说明公钥加密算法的使用:

    ```python from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa, padding

    生成RSA密钥对

    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


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^