首页 > 其他分享 >冲刺(day2)

冲刺(day2)

时间:2023-12-12 19:01:08浏览次数:33  
标签:key sm4 day2 冲刺 file output path dir

团队任务总结


一、团队成员任务分配

为了推进项目的进展,我们团队在今天共同完成了两个重要的功能模块。以下是团队成员在这两个模块上的任务分配和进展:

  1. 张钰权: 负责解密功能的实现。成功完成了解密文件的编写,包括AES解密和RSA密钥解密,确保解密过程的正确性和安全性。

  2. 周绍坤: 参与了解密功能的编写过程,负责协助处理解密时可能遇到的异常情况,并对项目的异常处理进行了优化。

  3. 张爽: 参与了SM4密钥生成和RSA密钥对生成功能的编写,保障了项目中关键的密钥生成和管理。

  4. 王熠名: 负责加密功能的实现。完成了文件加密的编写,包括AES加密和RSA密钥加密,确保了文件的安全传输和存储。

  5. 董子瑄: 参与了加密功能的编写过程,对加密时可能遇到的问题进行了分析和解决,提高了加密过程的稳定性。


二、团队任务及进展

在今天的工作中,我们小组成功完成了两个关键功能的编写:

  1. 解密功能模块:

    • 张钰权成功实现了文件的解密过程,通过AES解密和RSA密钥解密,确保了解密操作的正确性和安全性。
    • 周绍坤在解密模块中进行了异常处理的优化,提高了系统的稳定性。
  2. 加密功能模块:

    • 张爽,王熠名成功完成了文件的加密过程,通过AES加密和RSA密钥加密,确保了文件在传输和存储过程中的安全性。
    • 董子瑄在加密模块中分析并解决了可能出现的问题,提高了加密操作的稳定性。

三、团队遇到的困难

在完成这两个功能模块的过程中,团队遇到了一些挑战:

  • 密钥管理: 对于密钥的生成、存储和使用,团队需要更加仔细地考虑安全性和可维护性。

  • 异常处理: 在解密和加密过程中,可能会涉及到多种异常情况,团队需要进一步完善异常处理机制,确保系统不会出现较为离谱的漏洞。


四、心得体会

团队成员在合作完成这两个功能模块的过程中积累了许多经验:

  • 张钰权: 在解密功能的编写中,我对AES和RSA的结合使用有了更深入的理解,同时对异常情况的处理也有了更多实践。

  • 周绍坤: 通过参与解密功能的编写,我对异常处理有了更清晰的认识,同时也意识到密钥管理在项目中的重要性。

  • 张爽: 参与了密钥生成功能的编写,对密钥的生成和存储有了更加深入的了解,为项目的密钥管理提供了可靠的基础。

  • 王熠名: 在加密功能的实现中,我学到了如何结合AES和RSA实现更加安全的文件加密,对加密算法有了更深刻的理解。

  • 董子瑄: 参与了加密功能的编写,通过解决可能出现的问题,我对加密操作的稳定性需求有了更多的认识。


五、明日计划

为了进一步推进项目,团队制定了明日的计划:

  1. 优化密钥管理: 进一步完善密钥的生成、存储和使用机制,确保系统的密钥管理更加安全可靠。

  2. 异常处理优化: 针对解密和加密过程中可能出现的异常情况,进一步优化异常处理机制,提高系统的鲁棒性。

  3. 性能优化: 对解密和加密功能进行性能测试,优化代码,确保系统在大规模文件操作时仍能保持高效。

  4. 文档整理: 对已完成的功能模块进行文档整理,确保项目的文档清晰明了,方便后续维护和扩展。


六、总结

今天的团队合作中,大家共同完成了解密和加密功能模块,充分展现了团队成员在技术和协作方面的能力。通过不断学习和合作,我们相信在未来的项目中,团队将能够更好地应对各种挑战,取得更多的进展。


 

七、代码示例

from Crypto.Cipher import AES
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from Crypto.Util.Padding import unpad
import os

def decrypt_sm4(ciphertext, key):
    iv = ciphertext[:16]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plaintext = unpad(cipher.decrypt(ciphertext[16:]), AES.block_size)
    return plaintext

def decrypt_file(input_path, output_dir, rsa_private_key_path, sm4_key_path):
    try:
        with open(input_path, 'rb') as file:
            content = file.read()

        # 从外部加载 SM4 密钥文件
        with open(sm4_key_path, 'rb') as sm4_key_file:
            sm4_key = sm4_key_file.read()

        # 使用 RSA 私钥解密 SM4 密钥
        rsa_private_key = serialization.load_pem_private_key(
            open(rsa_private_key_path, 'rb').read(),
            password=None,
            backend=default_backend()
        )

        sm4_key = rsa_private_key.decrypt(
            sm4_key,
            padding.PKCS1v15()
        )

        # 分离加密的文件内容
        enc_content = content

        decrypted_content = decrypt_sm4(enc_content, sm4_key)

        decrypted_file_path = os.path.join(output_dir, os.path.basename(input_path).replace("_enc.docx", "_dec.docx"))  # 修改文件扩展名
        with open(decrypted_file_path, 'wb') as decrypted_file:
            decrypted_file.write(decrypted_content)

        print(f"文件{input_path}解密成功,并保存至{decrypted_file_path}。")
    except Exception as e:
        print(f"解密文件{input_path}时发生错误:{e}")

def main(input_dir, output_dir, rsa_private_key_path, sm4_key_path):
    try:
        os.makedirs(output_dir, exist_ok=True)

        file_list = [f for f in os.listdir(input_dir) if f.endswith('_enc.docx')]  # 修改文件扩展名
        for file_name in file_list:
            decrypt_file(os.path.join(input_dir, file_name), output_dir, rsa_private_key_path, sm4_key_path)

    except Exception as e:
        print(f"错误:{e}")

if __name__ == "__main__":
    input_directory = r"e:\dzgwtest"
    output_directory = r"e:\dzgwtest"
    rsa_private_key_path = os.path.join(output_directory, "private_key.pem")
    sm4_key_path = os.path.join(output_directory, "sm4key1.enc")
    main(input_directory, output_directory, rsa_private_key_path, sm4_key_path)
import os
from Crypto.Cipher import AES
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from Crypto.Util.Padding import pad

def generate_sm4_key(output_dir, count):
    try:
        key = os.urandom(16)
        key_file_path = os.path.join(output_dir, f"sm4key{count}.enc")
        with open(key_file_path, 'wb') as key_file:
            key_file.write(key)
        print(f"SM4密钥{count}生成成功,并保存至{key_file_path}。")
        return key
    except Exception as e:
        print(f"生成SM4密钥时发生错误:{e}")
        return None

def generate_rsa_key_pair(output_dir):
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )

    private_pem = private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    )

    public_key = private_key.public_key()
    public_pem = public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    )

    with open(os.path.join(output_dir, "private_key.pem"), 'wb') as private_key_file:
        private_key_file.write(private_pem)

    with open(os.path.join(output_dir, "public_key.pem"), 'wb') as public_key_file:
        public_key_file.write(public_pem)

    print("RSA密钥对生成成功。")

def encrypt_sm4(content, key):
    cipher = AES.new(key, AES.MODE_CBC)
    ciphertext = cipher.encrypt(pad(content, AES.block_size))
    return cipher.iv + ciphertext

def encrypt_file(input_path, output_dir, sm4_key, rsa_public_key):
    try:
        with open(input_path, 'rb') as file:
            content = file.read()

        enc_content = encrypt_sm4(content, sm4_key)
        enc_file_path = os.path.join(output_dir, os.path.basename(input_path).replace(".docx", "_enc.docx"))  # 修改文件扩展名
        with open(enc_file_path, 'wb') as enc_file:
            enc_file.write(enc_content)

        enc_rsa_key = rsa_public_key.encrypt(
            sm4_key,
            padding.PKCS1v15()
        )

        with open(os.path.join(output_dir, "sm4key1.enc"), 'wb') as sm4_key_file:
            sm4_key_file.write(enc_rsa_key)

        print(f"文件{input_path}加密成功,并保存至{enc_file_path}。")
    except Exception as e:
        print(f"加密文件{input_path}时发生错误:{e}")

def main(input_dir, output_dir):
    try:
        os.makedirs(output_dir, exist_ok=True)
        generate_rsa_key_pair(output_dir)

        file_list = [f for f in os.listdir(input_dir) if f.endswith('.doc') or f.endswith('.docx')]
        for i, file_name in enumerate(file_list, start=1):
            sm4_key = generate_sm4_key(output_dir, i)

            rsa_public_key_path = os.path.join(output_dir, "public_key.pem")
            rsa_public_key = serialization.load_pem_public_key(
                open(rsa_public_key_path, 'rb').read(),
                backend=default_backend()
            )

            encrypt_file(os.path.join(input_dir, file_name), output_dir, sm4_key, rsa_public_key)

    except Exception as e:
        print(f"错误:{e}")

if __name__ == "__main__":
    input_directory = r"e:\dzgwtest"
    output_directory = r"e:\dzgwtest"
    main(input_directory, output_directory)

 

标签:key,sm4,day2,冲刺,file,output,path,dir
From: https://www.cnblogs.com/Heartsteel/p/17897611.html

相关文章

  • 第六天冲刺
    man-K【电子公文传输系统·团队项目】第五次作业冲刺总结第六天团队作业(五):冲刺总结成员完成工作情况成员主要任务工作量厉彦宏sm2加解密功能实现6孔垂闽辅助实现sm2加解密模块4农启镰适配sm2加解密功能4王晨博完善前端页面及接口调试3丁乙倍......
  • 第七天冲刺
    man-K【电子公文传输系统·团队项目】第五次作业冲刺总结第七天团队作业(五):冲刺总结成员完成工作情况成员主要任务工作量厉彦宏最后整合和综合测试4孔垂闽完成加解密功能4农启镰前端页面测试4王晨博前端页面测试4丁乙倍数据库加密5前端......
  • Day26 打印九九乘法表
    打印九九乘法表分以下几步执行:1.我们先打印第一列,这个家应该都会2.我们把固定的1再用一个循环包起米3.去掉重复项,i<=j4.调整样式1.打印第一列packagecom.baixiaofan.struct;/*1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=1......
  • 冲刺(day1)
    一、团队成员任务分配为了更好地推进项目,我们继续按之前任务分工进行:张钰权:负责实现公文发送和公文接受功能。周绍坤:负责实现用户认证和用户管理功能。张爽:负责实现账户权限管理。王熠名:负责实现公文编辑功能。董子瑄:负责实现日志管理功能,并初步设计了粗糙的网页界面。......
  • Day24 DoWhile循环
    DoWhile循环对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do...while循环和while循环相似,不同的是,do...while循环至少会执行一次。do{//代码语句}while(布尔表达式);While和do-While的区别:while先判断后执行。dow......
  • Day25 For循环
    For循环for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环执行的次数是在执行前就确定的。语法格式如下:for(初始化;布尔表达式;更新(迭代)}{​//代码语句}在idea中直接输入100.for回车即自动填写for(inti=0;i<100;i++){}......
  • 项目冲刺D4
    今日任务和完成情况学号姓名工作状态20211111刘海涛数据库逻辑结构设计已完成20211117祁昱霖后端确定文件机密功能添加已完成20211105李宜时后端日志功能添加已完成20211121杨博川数据库逻辑结构设计已完成20211126李浩瑞前端登陆界面优化......
  • 项目冲刺D5
    今日任务和完成情况学号姓名工作状态20211111刘海涛提交数据库已完成20211117祁昱霖完善后端功能已完成20211105李宜时后端链接数据库已完成20211121杨博川提交数据库已完成20211126李浩瑞继续前端设计已完成部分加密代码及前端演示界......
  • 项目冲刺D6
    今日任务和完成情况学号姓名工作状态20211111刘海涛数据库逻辑结构设计已完成20211117祁昱霖后端架构设计已完成20211105李宜时后端架构设计已完成20211121杨博川前端架构设计已完成20211126李浩瑞前端架构设计已完成完善的代码截图如......
  • 项目冲刺D7
    (一)用户1.权限起草、修改、发布、接受、管理公文2.功能公文草拟公文上传公文下载公文发送公文接收公文管理公文加密(二)系统管理员新建用户文件列表用户管理项目运行截图......