资源简介

最近打算使用 python3 写一个图形化的聊天室,需要涉及到 RSA 加密模块,使用的是 python 自带的 RSA 加密模块。主要功能: 1. 作为聊天室服务器登录 2. 作为聊天室客户端登录 3. 客户端链接服务器IP 4. 客户端1与服务器进行验证 5. 客户端2与服务器进行验证 6. 客户端1加密消息并发送 7. 服务器解密消息并转发到客户端2 8. 客户端2发送消息同客户端1

资源截图

代码片段和文件信息

#!/usr/bin/env python3

# 导入cryptography库的相关模块和函数
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

from cryptography.hazmat.primitives.asymmetric import padding

# 定义辅助函数,用于打印16进制数据
def dump_hex(buffer sep=‘ ‘ indent=0 line_size=16):
    “““
    辅助函数,将bytes数组以如下格式打印输出:
    0000: 40 71 37 d0 80 32 7f 04 d9 6d fb fc f7 6a 7d d4
    0010: 48 ad 75 79 7a 0d 6c 55 01 ed 45 d5 1e 75 33 a6
    :param buffer: 待打印数据
    :param sep: 各16进制数据之间的分隔符,默认用空格‘ ‘分隔
    :param indent: 打印输出前是否需要缩进,默认不缩进
    :param line_size: 每行输出16进制的数量,默认1行输出16个
    :return: 无返回值
    “““
    # 计算缩进空格数
    leading = ‘%s‘ % ‘ ‘*indent
    # 循环打印每行16进制数据
    for x in range(0 len(buffer) line_size):
        # 打印缩进字符和当前行数据的起始地址
        print(‘%s%04X: ‘ % (leading x) end=‘‘)
        # 将当前行数据制作成列表list,并打印
        line = [‘%02x‘ % i for i in buffer[x:x+line_size]]
        print(*line sep=sep end=‘\n‘)


# 加密函数
def encrypt(src_file_name dst_file_name public_key_file_name):
    “““
    对原始数据文件使用指定的公钥进行加密,并将加密输出到目标文件中
    :param src_file_name: 原始数据文件
    :param dst_file_name: 加密输出文件
    :param public_key_file_name: 用于加密的公钥
    :return: 加密结果的bytes数组
    “““
    # 读取原始数据
    data_file = open(src_file_name ‘rb‘)
    data = data_file.read()
    data_file.close()

    # 读取公钥数据
    key_file = open(public_key_file_name ‘rb‘)
    key_data = key_file.read()
    key_file.close()

    # 从公钥数据中加载公钥 
    public_key = serialization.load_pem_public_key(
        key_data
        backend=default_backend()
        )

    # 使用公钥对原始数据进行加密,使用PKCS#1 v1.5的填充方式
    out_data = public_key.encrypt(
        data
        padding.PKCS1v15()
    )

    # 将加密结果输出到目标文件中
    # write encrypted data
    out_data_file = open(dst_file_name ‘wb‘)
    out_data_file.write(out_data)
    out_data_file.close()

    # 返回加密结果
    return out_data


# 解密函数
def decrypt(src_file_name dst_file_name private_key_file_name):
    “““
    对原始数据文件使用指定的私钥进行解密,并将结果输出到目标文件中
    :param src_file_name: 原始数据文件
    :param dst_file_name: 解密输出文件
    :param private_key_file_name: 用于解密的私钥
    :return: 解密结果的bytes数组
    “““
    # 读取原始数据
    data_file = open(src_file_name ‘rb‘)
    data = data_file.read()
    data_file.close()

    # 读取私钥数据
    key_file = open(private_key_file_name ‘rb‘)
    key_data = key_file.read()
    key_file.close()

    # 从私钥数据中加载私钥
    private_key = serialization.load_pem_private_key(
        key_data
        password=None
        backend=default_backend()
    )

    # 使用私钥对数据进行解密,使用PKCS#1 v1.5的填充方式
    out_data = private_key.decrypt(
        data
        padding.PKCS1v15()
    )

    # 将解密结果输出到目标文件中
    out_data_file = open(dst_file_name ‘wb‘)
    out_data_file.write(out_data)
    out_data_file.close()

    # 返回解密结果
    return out_data

if __name__ == “__main__“:
    #data_file_name = r‘msg.bin‘
    data_file_name = r‘msg.txt‘
    encrypted_file_name = r‘msg.bin.encrypted‘
    decrypted_file_name = r‘msg.bin.decrypted‘

    private_key_file_name = r

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      67646  2018-03-11 20:04  python3 + wxpython 实现RSA加密聊天室\ico.ico

     文件       4239  2018-05-16 09:55  python3 + wxpython 实现RSA加密聊天室\rsa-enc-dec.py

     文件     160756  2018-05-16 14:07  python3 + wxpython 实现RSA加密聊天室\抓包.pcapng

     文件      10547  2018-05-16 12:59  python3 + wxpython 实现RSA加密聊天室\聊天室-Python27.py

     文件      11918  2018-05-16 12:52  python3 + wxpython 实现RSA加密聊天室\聊天室-Python36.py

     文件   13778675  2018-05-16 14:12  python3 + wxpython 实现RSA加密聊天室\聊天室工具 x86_x64.exe

     文件      17122  2018-08-02 17:35  python3 + wxpython 实现RSA加密聊天室\聊天室工具.py

     目录          0  2018-08-02 17:36  python3 + wxpython 实现RSA加密聊天室

----------- ---------  ---------- -----  ----

             14050903                    8


评论

共有 条评论