相关文章推荐
道上混的豌豆  ·  SQL ...·  10 月前    · 
想表白的楼房  ·  java ...·  1 年前    · 
活泼的黄花菜  ·  PDOStatement::fetch - ...·  1 年前    · 
温暖的鸵鸟  ·  CentOS7 ...·  1 年前    · 


socket中使用Python DES加密解密方法 pyDes库(中英文)

本人也只是个小白,最近应老师要求学了学pyDes加解密。

我的编译环境是python3.7
先安装
pip install pyDes

import pyDes
import socket
import threading
Des_Key = b'hiansdnk'
Des_IV = b"\x00\x00\x00\x00\x00\x00\x00\x00"
PORT = 8080
BUFF = 1024

定义好端口等

加解密模块

def DesEncrypt(str):
    k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None, padmode = pyDes.PAD_PKCS5)
    Encrypt_Str = k.encrypt(str)
    return Encrypt_Str #返回加密后的密文
#解密函数DesDecrypt
def DesDecrypt(str):
    k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None, padmode = pyDes.PAD_PKCS5)
    Decrypt_Str = k.decrypt(str)
    return Decrypt_Str
  • pyDes.des(key, [mode], [IV], [pad], [padmode]) pyDes.triple_des(key,
    [mode], [IV], [pad], [padmode]) key -> 含有加密密钥的字节。
    DES为8字节,16或24字节用于三重DES mode ->
    加密类型的可选参数可以是pyDes.ECB(电子密码本)或pyDes.CBC(密文分组链接) IV ->
    使用CBC模式,必须提供可选的初始值字节。长度必须是8个字节。 pad ->
    可选参数,完成的所有加密/解密操作期间使用的填充字符(PAD NORMAL)。 padmode ->
    可选参数,设置填充模式(PAD_NORMAL或PAD_PKCS5)在使用此实例完成的所有encrypt / decrpt操作期间使用。
    建议使用PAD_PKCS5填充,因为不需要担心填充出现问题,填充可以在解密时明确地删除使用PAD_PKCS5 padmode加密的数据。

收发模块

#消息发送函数
def SendMessage(Sock, test):
    while True:
        SendData = input()
        SendData = SendData.encode()       #中文必须先转成字节才能加密
        encryptdata = DesEncrypt(SendData)
        print('encrypted data is ' + str(encryptdata))
        if len(SendData) > 0:
            Sock.send(encryptdata)
#消息接收函数
def RecvMessage(Sock, test):
    while True:
        Message = Sock.recv(BUFF)
        decryptdata = DesDecrypt(Message)
        if len(Message)>0:
            print("receive message:" + decryptdata.decode('utf8'))

注意
中文是没法直接用 DesEncrypt加密的因为它只接受字节,不接受str
加上SendData = SendData.encode()这一句就搞定。

最后是socket和多线程

def main():
    type = input('please input server or client:')
    if type == 'server':
        ServerSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        ServerSock.bind(('127.0.0.1',PORT))
        ServerSock.listen(5)
        print("listening......")
        while True:
            ConSock,addr = ServerSock.accept()
            print('connection succeed' + '\n' + 'you can chat online')
            thread_1 = threading.Thread(target = SendMessage, args = (ConSock, None))
            thread_2 = threading.Thread(target = RecvMessage, args = (ConSock, None))
            thread_1.start()
            thread_2.start()
    elif type == 'client':
        ClientSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        ServerAddr = input("please input the server's ip address:")
        ClientSock.connect((ServerAddr, PORT))
        print('connection succeed, chat start!')
        thread_3 = threading.Thread(target = SendMessage, args = (ClientSock, None))
        thread_4 = threading.Thread(target = RecvMessage, args = (ClientSock, None))
        thread_3.start()
        thread_4.start()

运行结果

python模型加密 python des加密_编程语言


python模型加密 python des加密_python_02


到这就大功告成了!

最后贴上完整代码

import pyDes
import socket
import threading
Des_Key = b'hiansdnk'
Des_IV = b"\x00\x00\x00\x00\x00\x00\x00\x00"
PORT = 8080
BUFF = 1024
#加密函数DesEncrypt
pyDes.des(key, [mode], [IV], [pad], [padmode])
pyDes.triple_des(key, [mode], [IV], [pad], [padmode])
key     -> 含有加密密钥的字节。 DES为8字节,16或24字节用于三重DES
mode    -> 加密类型的可选参数可以是pyDes.ECB(电子密码本)或pyDes.CBC(密文分组链接)
IV      -> 使用CBC模式,必须提供可选的初始值字节。长度必须是8个字节。
pad     -> 可选参数,完成的所有加密/解密操作期间使用的填充字符(PAD NORMAL)。
padmode -> 可选参数,设置填充模式(PAD_NORMAL或PAD_PKCS5)在使用此实例完成的所有encrypt / decrpt操作期间使用。
建议使用PAD_PKCS5填充,因为不需要担心填充出现问题,填充可以在解密时明确地删除使用PAD_PKCS5 padmode加密的数据。
encrypt(data, [pad], [padmode])
decrypt(data, [pad], [padmode])
data    -> 要加密/解密的字节
pad     -> 可选参数。 仅在使用padmode为PAD_NORMAL时, 加密时,将此字符添加到数据块的末尾。 对于解密,将删除尾随与最后8个垫填充
字符匹配的字符未加密数据块的字节数。
padmode -> 可选参数,设置填充模式,必须是PAD_NORMAL之一或PAD_PKCS5。 默认为PAD_NORMAL
def DesEncrypt(str):
    k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None, padmode = pyDes.PAD_PKCS5)
    Encrypt_Str = k.encrypt(str)
    return Encrypt_Str #返回加密后的密文
#解密函数DesDecrypt
def DesDecrypt(str):
    k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad = None, padmode = pyDes.PAD_PKCS5)
    Decrypt_Str = k.decrypt(str)
    return Decrypt_Str
#消息发送函数
def SendMessage(Sock, test):
    while True:
        SendData = input()
        SendData = SendData.encode()       #中文必须先转成字节才能加密
        encryptdata = DesEncrypt(SendData)
        print('encrypted data is ' + str(encryptdata))
        if len(SendData) > 0:
            Sock.send(encryptdata)
#消息接收函数
def RecvMessage(Sock, test):
    while True:
        Message = Sock.recv(BUFF)
        decryptdata = DesDecrypt(Message)
        if len(Message)>0:
            print("receive message:" + decryptdata.decode('utf8'))
def main():
    type = input('please input server or client:')
    if type == 'server':
        ServerSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        ServerSock.bind(('127.0.0.1',PORT))
        ServerSock.listen(5)
        print("listening......")
        while True:
            ConSock,addr = ServerSock.accept()
            print('connection succeed' + '\n' + 'you can chat online')
            thread_1 = threading.Thread(target = SendMessage, args = (ConSock, None))
            thread_2 = threading.Thread(target = RecvMessage, args = (ConSock, None))
            thread_1.start()
            thread_2.start()
    elif type == 'client':
        ClientSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        ServerAddr = input("please input the server's ip address:")
        ClientSock.connect((ServerAddr, PORT))
        print('connection succeed, chat start!')
        thread_3 = threading.Thread(target = SendMessage, args = (ClientSock, None))
        thread_4 = threading.Thread(target = RecvMessage, args = (ClientSock, None))
        thread_3.start()
        thread_4.start()
if __name__ == '__main__':
    main()

仅供学习我也知识个小白希望有大佬指点或者一起交流。


redis中存放缓存文件位置 redis缓存在哪

一、介绍什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码缓存无处不在为什么要使用缓存? 因为速度快,好用缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力但是缓存也会增加代码负责度和运营成本使用缓存优点:降低后端节点负载提升数据读写性能缺点:额外引

java 获取系统进程 java获取当前系统路径

1、利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径2、使用File提供的函数获取当前路径: File directory = new File("");//设定为当前文件夹 System.out.pri