团队作业(五):项目冲刺6

发布时间 2023-12-16 18:51:50作者: 你玩原神吗组

团队作业(五):项目冲刺6

各个成员今日完成的任务

范超明:继续完善前端代码
周意凯:继续加密解密代码修改
黄琪凯:继续完善后端代码
尤其羽:继续完善后端代码
杨语桐:代码测试

代码完成情况

前端新增部分代码

data_directory = "data"
    read_user_info(sm4_key)

    threading.Thread(target=waiting_for_client, args=(data_directory,sm4_key)).start()

    while True:
        print("1. add user")
        print("2. encrypt one file")
        print("3. decrypt one file")
        print("4. encrypt all files")
        print("5. decrypt all files")
        print("6. change the password")
        print("7. exit")
        print("input the number to choose an operation")
        choice = input()

        if choice == "1":
            add_user()
            write_user_info(sm4_key)
        elif choice == "2":
            filename = input("input the filename: ")
            encrypt_one_file(filename, data_directory, sm4_key)
        elif choice == "3":
            filename = input("input the filename: ")
            decrypt_one_file(filename, data_directory, sm4_key)
        elif choice == "4":
            encrypt_files(data_directory, sm4_key)
        elif choice == "5":
            decrypt_files(data_directory, sm4_key)
        elif choice == "6":
            change_server_password(sm4_key)
            break
        elif choice == "7":
            print("exiting...")
            # my_thread.join()
            break
        else:
            print("error number, input again")

    stop_thread.set()


if __name__ == "__main__":
    main()

后端新增部分代码

def decrypt_one_file(filename, directory, sm4_key):
    if not filename.endswith(".encrypted"):
        filename += ".encrypted"
    if filename not in os.listdir(directory) :
        print("no such file, exit")
        return
    decrypt_file(os.path.join(directory, filename), sm4_key)
def client_thread(conn, addr, data_directory, sm4_key):
    # 验证用户名和密码
    username = conn.recv(1024).decode()
    password = conn.recv(1024).decode()

    if users.get(username) == password:
        conn.send(b'Authentication successful')
       
        # 接收文件名并发送文件
        filename = conn.recv(1024).decode()

        # 请求的文件已加密
        if filename + ".encrypted" in os.listdir(data_directory):
            # 解密文件
            decrypt_one_file(filename, data_directory, sm4_key)

            complete_filename = os.path.join(data_directory, filename)
            send_encrypted_file(conn, complete_filename, password)

            # 加密文件
            encrypt_one_file(filename, data_directory, sm4_key)

        # 请求的文件未加密
        elif filename in os.listdir(data_directory):
            send_encrypted_file(conn, filename, password)
        else:
            conn.send(b'no such file')
    else:
        conn.send(b'Authentication failed')

    conn.close()

def waiting_for_client(data_directory, sm4_key):
    global stop_thread
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('localhost', 54321))
    server.listen(5)

    server.settimeout(3.0)  # 设置超时时间
    while not stop_thread.is_set():
        try:
            conn, addr = server.accept()
            # 处理连接
            threading.Thread(target=client_thread, args=(conn, addr, data_directory, sm4_key)).start()
        except socket.timeout:
            continue  # 超时,回到循环的开始处检查条件
        except Exception as e:
            break  # 其他异常,退出循环

加密解密部分新增代码

def send_encrypted_file(conn, filename, password):
    # 使用SM4加密文件数据
    sm4_key = generate_sm4_key(password)
    crypt_sm4 = sm4.CryptSM4()
    crypt_sm4.set_key(sm4_key, sm4.SM4_ENCRYPT)

    try:
        file_size = os.path.getsize(filename)
        conn.sendall(str(file_size).encode())

        with open(filename, 'rb') as file:
            while True:
                file_data = file.read(1024)
                if not file_data:
                    break
                encrypted_data = crypt_sm4.crypt_ecb(file_data)
                conn.sendall(encrypted_data)

    except FileNotFoundError:
        conn.sendall(b'no such file')

    # 发送一个信号表示文件发送完毕
    conn.sendall(b'EOF')

提交到gitee

 你所访问的页面不存在 (404) (gitee.com)

明日各个成员的任务安排

范超明:前端代码完善纠错
周意凯:继续加密解密代码修改
黄琪凯:完善纠错后端代码
尤其羽:完善纠错后端代码
杨语桐:整体代码测试

各个成员今日对项目的贡献量

姓 名贡献量
范超明 2
周意凯 2
黄琪凯 2
尤其羽 2
杨语桐 2