网络安全应用--文件加解密

福州大学数学与统计学院

《计算机网络》上机实验报告

                                                                                               

专业和班级

21级数综

成绩

 

姓名

吴xx

学号

02xxxx316

课程名称

计算机网络

实验名称

网络安全应用--文件加解密

1.     运用工具或编程实现数据的加密解密过程;

2.     初步理解数据加密的原理;

3.     通过有关操作,完成文件的加密和解密过程,并截图为证。

简要解释有关问题。

1.  简要比较对称加密、非对称加密的概念和特性;

答:对称加密:

  • 概念:对称加密使用相同的密钥进行加密和解密。发送方和接收方需要共享相同的密钥。
  • 特性:
    • 速度快,效率高。
    • 密钥管理复杂,因为每对通信方都需要一个独立的密钥。
    • 常见算法:AES、DES、3DES。

非对称加密:

  • 概念:非对称加密使用一对密钥进行加密和解密。公钥用于加密,私钥用于解密,或反之亦然。
  • 特性:
    • 速度较慢,计算复杂度高。
    • 密钥管理简单,只需管理一对密钥(公钥和私钥)。
    • 公钥可以公开,私钥必须保密。
    • 常见算法:RSA、ECC、DSA。

2.     初步简述非对称加密的原理以及作用。

答:非对称加密的原理基于数学函数的单向性,即通过公钥加密的数据只能通过相应的私钥解密,反之亦然。这种加密方式确保了数据传输的安全性,因为即使公钥被公开,只有持有私钥的一方才能解密信息。

作用:

  • 提供数据加密和解密服务,确保数据传输的机密性。
  • 用于数字签名,验证数据的完整性和发送方的身份。
  • 支持密钥交换协议,安全地交换对称加密的密钥

3.     对比分析非对称加密和电子签名的关系。

答:非对称加密和电子签名密切相关,但它们的目的和使用场景有所不同。

  • 非对称加密:主要用于确保数据的机密性。通过公钥加密信息,只有拥有私钥的人才能解密。
  • 电子签名:主要用于验证数据的完整性和发送方的身份。发送方使用私钥对信息进行签名,接收方使用公钥验证签名。电子签名确保了信息在传输过程中未被篡改,并确认了发送方的身份。

关系:

  • 非对称加密是电子签名的基础技术之一。
  • 两者都使用一对密钥(公钥和私钥)。
  • 非对称加密关注数据的机密性,而电子签名关注数据的完整性和认证。

4.  解释:分组密码、公匙密码、古典密码等技术特征,自查自选其中的两个作为应用编程实现。

答分组密码 (Block Cipher)

分组密码是一种对称加密算法,它将明文分成固定大小的块(如64位或128位),并对每个块进行加密。主要特点包括:

  1. 对称性:使用相同的密钥进行加密和解密。
  2. 块操作:将数据分成固定大小的块进行加密。
  3. 多模式操作:可以采用不同的模式(如ECB、CBC、CFB、OFB等)来增强安全性。
  4. 效率高:适用于大数据量的加密传输。
  5. 常见算法:AES(高级加密标准)、DES(数据加密标准)、3DES。

公匙密码 (Public-Key Cipher)

公钥密码是一种非对称加密算法,使用一对密钥:公钥和私钥。主要特点包括:

  1. 非对称性:使用不同的密钥进行加密和解密。
  2. 密钥对:包含一个公钥和一个私钥。
  3. 安全性高:依赖于数学难题(如大数分解或离散对数问题)的难解性来确保安全。
  4. 密钥分发简便:公钥可以公开,私钥需保密。
  5. 常见算法:RSA、ECC(椭圆曲线加密)、DSA(数字签名算法)。

古典密码 (Classical Cipher)

古典密码是指在现代计算机和复杂数学算法出现之前使用的加密方法。主要特点包括:

  1. 对称性:通常使用相同的密钥进行加密和解密。
  2. 简单性:加密和解密过程相对简单,易于手工操作。
  3. 易破解性:由于其简单性,许多古典密码在现代技术下容易被破解。
  4. 常见算法:凯撒密码(Caesar Cipher)、维吉尼亚密码(Vigenère Cipher)、置换密码。

技术特征比较

特征

分组密码

公匙密码

古典密码

加密/解密密钥

相同

不同

相同

安全性

非常高

算法复杂度

适用范围

大数据量传输

密钥交换、数字签名

简单加密

 

 

 

 

 

 

1. 安装Edking。

2. DES 加密/解密过程。

A.创建文件:用自己的名字建立一个记事本文件“test1.txt”,并写上内容:中午12点老地方见,没有密码看不到。

B.加密步骤:按图示,选择输入明文文件和输出文件名,输入密钥,生成一个加密文件“test1.txt.des”。

C.解密步骤:按图示,选择输入密文文件和输出文件名,输入密钥,生成一个解密文件“test2.txt”。试着比较解密后的文件“test2.txt”与原文件“test1.txt”内容一致么?(截2个图对比)

对比:

D.查看DES加密/解密完成后形成多少个文件。(截1个图)

3. RSA 加密/解密过程。

Edking 的RSA 算法加密使用方法:RSA 算法的目的在于鉴别。

A.修改文件:打开“test1.txt”,并修改内容:晚上18点老地方见,没有密码看不到。

B.加密步骤:在“设置”中选择MDR,显示MDR 加/解密界面。首先生成密钥对和模文件,然后选择要加密的文件“test1.txt”,将模数文件和密钥导入,加密后,得到“test1.txt.mdr” 文件,

C.解密步骤:将待解密的文件输入,并将模数文件和密钥导入,解密后得到文件“test3.txt”。试着比较,和原文件“test1.txt”相同么?(截2个图对比)

对比:

D.查看RSA加密/解密完成后形成多少个文件。(截1个图)

4. 其他选项。

A. 请二选一:“加密后删除原文件”、“解密后删除原文件”。 (截1个图)

加密后删除原文件

已经删除

B. 请二选一:“删除文件前提示”、“覆盖文件前提示”。 (截1个图)

删除文件前提示:

C. 请选择:“查看加密/解密时间”。 (截1个图)

5.  解释:分组密码、公匙密码、古典密码等技术特征,自查自选其中的两个作为应用编程实现。

答:分组密码(AES)的实现

#include <iostream>

#include <string>

#include <cryptopp/aes.h>

#include <cryptopp/modes.h>

#include <cryptopp/filters.h>

#include <cryptopp/osrng.h>

using namespace CryptoPP;

int main() {

    // 生成随机密钥和初始向量

    AutoSeededRandomPool prng;

    byte key[AES::DEFAULT_KEYLENGTH];

    byte iv[AES::BLOCKSIZE];

    prng.GenerateBlock(key, sizeof(key));

    prng.GenerateBlock(iv, sizeof(iv));

    std::string plaintext = "This is a secret message!";

    std::string ciphertext, decryptedtext;

    // AES加密

    CBC_Mode<AES>::Encryption aesEncryption(key, AES::DEFAULT_KEYLENGTH, iv);

    StringSource(plaintext, true,

        new StreamTransformationFilter(aesEncryption,

            new StringSink(ciphertext)

        )

    );

 

    // AES解密

    CBC_Mode<AES>::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH, iv);

    StringSource(ciphertext, true,

        new StreamTransformationFilter(aesDecryption,

            new StringSink(decryptedtext)

        )

    );

    // 输出结果

    std::cout << "Original plaintext: " << plaintext << std::endl;

    std::cout << "Encrypted ciphertext: " << ciphertext << std::endl;

    std::cout << "Decrypted plaintext: " << decryptedtext << std::endl;

    return 0;

}

公匙密码(RSA)的实现

from cryptography.hazmat.primitives.asymmetric import rsa

from cryptography.hazmat.primitives import serialization

from cryptography.hazmat.primitives.asymmetric import padding

from cryptography.hazmat.primitives import hashes

 

# 生成RSA密钥对

private_key = rsa.generate_private_key(

    public_exponent=65537,

    key_size=2048,

    backend=default_backend()

)

public_key = private_key.public_key()

 

# 明文

plaintext = b'This is a secret message!'

# 加密

ciphertext = public_key.encrypt(

    plaintext,

    padding.OAEP(

        mgf=padding.MGF1(algorithm=hashes.SHA256()),

        algorithm=hashes.SHA256(),

        label=None

    )

# 解密

decrypted_data = private_key.decrypt(

    ciphertext,

    padding.OAEP(

        mgf=padding.MGF1(algorithm=hashes.SHA256()),

        algorithm=hashes.SHA256(),

        label=None

    )

)

print("Original plaintext:", plaintext)

print("Encrypted ciphertext:", ciphertext)

print("Decrypted plaintext:", decrypted_data)

1.     你的感受:使用Edking软件进行加密和解密文件,我体验到了数据安全和隐私保护的实际应用。能够亲自操作和观察加密算法如何保护文件内容,让我对信息安全的重要性有了更深刻的认识。

2.     你的收获:学会了如何使用Edking软件进行文件加密和解密,提升了我的信息安全操作技能。

3.     你的困难:在开始阶段,可能遇到了软件安装、配置和操作界面的麻烦,需要耐心和时间来适应。

4.     你的启示:实验使我深刻认识到在今天的数字环境中,数据安全和隐私保护至关重要。选择合适的加密工具和方法能有效保护个人和机构的敏感信息。

           

 

posted @ 2024-06-27 12:47  我欲voyu  阅读(24)  评论(0编辑  收藏  举报