网络安全应用--文件加解密
福州大学数学与统计学院
《计算机网络》上机实验报告
专业和班级 |
21级数综 |
成绩 |
|
||||||||||||||||||||||
姓名 |
吴xx |
学号 |
02xxxx316 |
||||||||||||||||||||||
课程名称 |
计算机网络 |
实验名称 |
网络安全应用--文件加解密 |
||||||||||||||||||||||
实 验 目 的 和 要 求 |
1. 运用工具或编程实现数据的加密解密过程; 2. 初步理解数据加密的原理; 3. 通过有关操作,完成文件的加密和解密过程,并截图为证。 |
||||||||||||||||||||||||
知 识 理 论 基 础 |
简要解释有关问题。 1. 简要比较对称加密、非对称加密的概念和特性; 答:对称加密:
非对称加密:
2. 初步简述非对称加密的原理以及作用。 答:非对称加密的原理基于数学函数的单向性,即通过公钥加密的数据只能通过相应的私钥解密,反之亦然。这种加密方式确保了数据传输的安全性,因为即使公钥被公开,只有持有私钥的一方才能解密信息。 作用:
3. 对比分析非对称加密和电子签名的关系。 答:非对称加密和电子签名密切相关,但它们的目的和使用场景有所不同。
关系:
4. 解释:分组密码、公匙密码、古典密码等技术特征,自查自选其中的两个作为应用编程实现。 答分组密码 (Block Cipher)分组密码是一种对称加密算法,它将明文分成固定大小的块(如64位或128位),并对每个块进行加密。主要特点包括:
公匙密码 (Public-Key Cipher) 公钥密码是一种非对称加密算法,使用一对密钥:公钥和私钥。主要特点包括:
古典密码 (Classical 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. 你的启示:实验使我深刻认识到在今天的数字环境中,数据安全和隐私保护至关重要。选择合适的加密工具和方法能有效保护个人和机构的敏感信息。 |
||||||||||||||||||||||||