weixin_44532019 2023-09-25 21:35 采纳率: 71.4%
浏览 21
已结题

python 3des pyDes库

做接口,已拿到对方返回得数据也有解密得密钥,并且也可以解密成功!

但是解密时长实在令人难以接受
目前拿到得数据是这么大

img

然后目前解密方法是这样

img

有没有人能指点一二让我解密快一些 目前解密时间平均一分钟解密一次,我每天大约要解密几万次这速度实在难以接受

  • 写回答

14条回答 默认 最新

  • threenewbee 2023-09-25 22:49
    关注
    获得1.20元问题酬金

    我看了你的代码,我感觉速度之所以慢,可能和你的base64编码的字符串处理有关,本身des算法是确定的,从算法层面说应该没法再快,你用C语言封装下,代替 python 的代码看看。

    评论 编辑记录
  • 「已注销」 2023-09-25 22:11
    关注

    针对使用pyDes库解密3DES加密数据速度较慢的问题,可以尝试以下优化方法来提高解密速度:

    1. 优化算法实现:在解密过程中,算法的实现方式对性能有很大的影响。可以仔细检查pyDes库中算法的实现方式,是否存在可以优化的地方。例如,可以尝试使用更高效的算法或优化算法的代码实现,以提高解密速度。
    2. 多线程或并行解密:每天需要解密大量的数据,如果可能的话,可以使用多线程或并行解密的方法来加快解密速度。通过将数据分发到多个线程或进程中并行解密,可以显著缩短整体解密时间。
    3. 对密钥进行缓存:如果使用的是对称加密算法,每次解密都需要重新计算密钥。可以考虑将密钥进行缓存,避免重复计算。通过将密钥保存在内存或磁盘上,可以在解密过程中直接使用缓存的密钥,提高解密速度。
    4. 硬件加速:如果可能的话,可以考虑使用硬件加速来提高解密速度。例如,可以使用GPU或其他硬件设备来加速解密过程,以提升性能和速度。
    5. 调整参数:某些加密算法可以配置一些参数来优化性能。可以检查pyDes库是否提供了相关参数的配置,例如加密块大小、填充方式等。通过合理调整这些参数,可能能够提高解密速度。
    6. 使用其他库:如果pyDes库的性能无法满足需求,可以考虑使用其他更为高效的库。例如,Cython、Numba或PyCryptodome等库在解密性能方面可能更具优势,可以尝试作为替代方案。

    综上所述,针对解密速度较慢的问题,可以通过优化算法实现、多线程或并行解密、缓存密钥、硬件加速以及调整参数和使用其他高效库等方法来提高解密速度。需要注意的是,每个方法的效果可能因具体情况而异,建议根据实际需求进行尝试和评估。

    评论
  • 玥轩_521 2023-09-25 22:52
    关注
    获得0.60元问题酬金

    援引讯飞星火:
    你可以尝试使用多线程或多进程来加速解密过程。这里有一个使用Python的concurrent.futures库进行多线程解密的示例:

    import pyDes
    from concurrent.futures import ThreadPoolExecutor
    
    def decrypt_image(img, key):
        # 你的解密函数,使用pyDes库进行解密
        pass
    
    def main():
        # 假设你已经获取了所有需要解密的数据和密钥
        images = [...]  # 图片数据列表
        keys = [...]  # 对应的密钥列表
    
        # 创建一个线程池,根据需要调整线程数量
        with ThreadPoolExecutor(max_workers=4) as executor:
            # 使用线程池并行解密所有图片
            results = list(executor.map(lambda img, key: decrypt_image(img, key), images, keys))
    
    if __name__ == "__main__":
        main()
    

    这个示例使用了4个线程来并行解密图片,你可以根据实际情况调整线程数量以获得最佳性能。注意,由于GIL(全局解释器锁)的存在,多线程在CPU密集型任务中可能无法充分利用多核性能。在这种情况下,你可以考虑使用concurrent.futures.ProcessPoolExecutor来实现多进程并行。

    评论
  • 数据大魔王 2023-09-25 23:23
    关注
    获得0.80元问题酬金

    解密的效率问题可能是由于数据量过大或解密方法不够高效所导致的。以下是一些建议来提高解密的速度:

    1. 确保使用的解密算法是高效的:不同的解密算法具有不同的性能特点,有些算法可能比其他算法更快。你可以尝试使用其他加密算法或优化已有算法,以提高解密速度。同时,确保在解密过程中不出现任何错误。如果解密方法产生了错误,可能会导致增加解密时间。

    2. 并行解密:如果你的系统支持并行处理,可以将解密任务分解为多个子任务,并在多个线程或进程中同时进行解密。这样可以将解密时间缩短到原来的几分之一或更少,提高整体解密速度。

    3. 使用更强大的硬件:解密速度受限于硬件性能,尤其是CPU的运算能力。如果你的系统配置允许,可以考虑升级到更高性能的处理器。使用多核心的CPU也可以提高解密的效率。

    4. 数据分片和缓存:如果解密的数据过大,你可以将数据分成更小的块,并使用缓存来提高解密速度。在解密过程中,只加载并解密当前需要的数据块,减少内存占用和解密时间。

    5. 优化代码:对解密过程进行代码性能优化,例如减少不必要的计算量、避免重复计算等。使用一些性能分析工具来帮助你找出并改善性能瓶颈。

    6. 考虑使用专门的解密库或工具:可能有一些专门用于解密的库或工具,它们经过优化以提供更高的解密速度。你可以尝试使用这些工具来提升解密性能。

    请注意,以上建议只是一般性的指导,具体的解决方案可能取决于你使用的加密算法和系统环境。如果问题仍然存在,可能需要进一步的分析和优化。

    评论
  • 专家-赤兔[在线] 2023-09-26 02:07
    关注
    获得0.60元问题酬金

    引自免费小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    在处理大量数据加密解密时,使用pyDes库可能会导致解密速度较慢。你可以考虑使用更高效的加密算法或库来替代pyDes。

    一种可能的替代方案是使用cryptography库,该库提供了更快速的加密和解密方法。下面是一个使用AES算法进行加密和解密的示例代码:

    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
    from cryptography.hazmat.backends import default_backend
    import base64
    
    def AES_Encode(key, encrypt):
        backend = default_backend()
        cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
        encryptor = cipher.encryptor()
        ciphertext = encryptor.update(encrypt) + encryptor.finalize()
        return base64.b64encode(ciphertext)
    
    def AES_Decrypt(key, encrypt):
        backend = default_backend()
        cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
        decryptor = cipher.decryptor()
        ciphertext = base64.b64decode(encrypt)
        return decryptor.update(ciphertext) + decryptor.finalize()
    

    此外,还可以考虑使用多线程或异步处理来提高解密速度。

    评论
  • 心梓知识 2023-09-26 05:55
    关注
    获得0.60元问题酬金

    结合GPT给出回答如下请题主参考
    首先,了解一下pyDes库的使用:

    from pyDes import *
    key = b"abcdefgh" # 8字节(64位)密钥
    iv = b"12345678" # 8字节(64位)初始化向量
    data = b"input text" # 带解密的数据
    k = des(key, CBC, iv, pad=None, padmode=PAD_PKCS5) # 3DES对象
    d = k.encrypt(data) # 3DES加密
    print("Encrypted: %r" % d)
    print("Decrypted: %r" % k.decrypt(d)) # 3DES解密
    

    可以看到,每次解密都需要重新创建一个3DES对象。如果需要频繁解密大量数据,可以考虑先创建一个3DES对象,在使用时直接调用解密方法,这样可以提高解密速度。

    另外,可以考虑使用多进程或者多线程来并行解密,提高解密效率。以下是一个多进程解密的示例代码:

    from pyDes import *
    from multiprocessing import Pool
    
    def decrypt(data):
        key = b"abcdefgh" # 8字节(64位)密钥
        iv = b"12345678" # 8字节(64位)初始化向量
        k = des(key, CBC, iv, pad=None, padmode=PAD_PKCS5) # 3DES对象
        return k.decrypt(data)
    
    if __name__ == "__main__":
        data_list = [...] # 需要解密的数据列表
        with Pool(processes=4) as pool: # 设置4个进程
            result = pool.map(decrypt, data_list)
        print(result)
    

    在这个示例中,将需要解密的数据列表传递给Pool.map方法,会自动将数据分配给多个进程并行处理。可以通过修改processes参数来调整进程数,以充分利用CPU资源,提高解密效率。

    评论
  • 杨得江-君临天下wyj 2023-09-26 06:42
    关注
    获得0.60元问题酬金
    
    import pyDes
    from concurrent.futures import ThreadPoolExecutor
    def decrypt_image(img, key):
        # 你的解密函数,使用pyDes库进行解密
        pass
    def main():
        # 假设你已经获取了所有需要解密的数据和密钥
        images = [...]  # 图片数据列表
        keys = [...]  # 对应的密钥列表
        # 创建一个线程池,根据需要调整线程数量
        with ThreadPoolExecutor(max_workers=4) as executor:
            # 使用线程池并行解密所有图片
            results = list(executor.map(lambda img, key: decrypt_image(img, key), images, keys))
    if __name__ == "__main__":
        main()
    
    
    评论
  • Marst Code 2023-09-26 16:01
    关注
    获得0.60元问题酬金

    分析思路:效率不够,资源来凑,也可以解决一部分问题.采用多进程多开几个web服务.
    代码示例如下

    import multiprocessing
    from flask import Flask
    
    app = Flask(__name__)
    
    def start_web_service(port):
        app.run(port=port)
    
    # 创建多个进程来启动多个 WEB 服务
    processes = []
    for port in [5000, 5001, 5002]:
        process = multiprocessing.Process(target=start_web_service, args=(port,))
        processes.append(process)
        process.start()
    
    # 等待所有进程结束
    for process in processes:
        process.join()
    
    
    
    评论
  • coder_small_bell 2023-09-27 09:42
    关注
    获得0.40元问题酬金

    调用个C的算法吧
    cython'

    评论
  • Leodong. 2023-09-27 11:02
    关注
    获得0.60元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    你可以尝试使用更快的加密算法,例如AES。在Python中,可以使用pycryptodome库来实现AES加密和解密。以下是一个使用AES加密和解密的示例:

    首先,安装pycryptodome库:

    pip install pycryptodome
    

    然后,使用以下代码进行AES加密和解密:

    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    import base64
    
    def aes_encrypt(data, key):
        cipher = AES.new(key, AES.MODE_ECB)
        encrypted_data = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
        return base64.b64encode(encrypted_data).decode('utf-8')
    
    def aes_decrypt(encrypted_data, key):
        cipher = AES.new(key, AES.MODE_ECB)
        decrypted_data = unpad(cipher.decrypt(base64.b64decode(encrypted_data)), AES.block_size)
        return decrypted_data.decode('utf-8')
    
    # 示例
    key = b'abcdefghijklmnop'  # 16字节密钥
    data = '需要加密的数据'
    
    encrypted_data = aes_encrypt(data, key)
    print('加密后的数据:', encrypted_data)
    
    decrypted_data = aes_decrypt(encrypted_data, key)
    print('解密后的数据:', decrypted_data)
    

    注意:AES加密要求数据长度是16字节的倍数,因此需要对数据进行填充。你可以使用Crypto.Util.Padding模块中的padunpad函数来实现填充和解填充。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论
  • yy64ll826 2023-09-27 14:57
    关注
    获得0.40元问题酬金
    评论
  • 想你依然心痛 全栈领域新星创作者 2023-09-27 18:11
    关注
    获得0.60元问题酬金

    解密的时间长短,很大程度上与你使用的算法密切相关。你可以考虑使用更快速的算法,例如AES(Advanced Encryption Standard)或DES(Data Encryption Standard)。同时,你还可以考虑使用多线程或并行计算的方式,来提高解密的效率。此外,还需要确保你的代码和计算机资源都充足,以确保算法能够得到充分的发挥。

    评论
  • bug菌¹ Java领域优质创作者 2023-09-28 01:08
    关注
    获得1.00元问题酬金

    该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


    您可以尝试使用 multiprocessing(多进程)模块来并行化解密过程,以提高解密速度。具体可以将待解密的数据分成多个部分,每个进程负责解密其中一部分。此外,您也可以尝试将数据存储在 Redis 等内存型数据库中,以减少 IO 操作对解密速度的影响。另外,如果您对加密算法的安全性要求不高,也可以考虑使用其他更快速的加密算法,如 AES 算法。

    评论
  • 关注
    获得0.60元问题酬金

    pycryptodome库可以实现AES加密和解密

    评论

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 创建了问题 9月25日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色