django admin后台中进行多个手机号解密消耗时间对比

这篇具有很好参考价值的文章主要介绍了django admin后台中进行多个手机号解密消耗时间对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:
1 手机号在数据库中是使用rsa方式加密存储,后台查看中需要转换为明文,因为需要解密多个手机号,所以在后台查看中消耗时间3秒,希望通过多线程,多进程,异步方式来缩短时间

相关注意点:
Django遵循单请求模型,其中每个请求都在单个线程中处理。在Django的请求 / 响应周期中引入多线程可能无法提供预期的性能提升
据库访问是一个常见的瓶颈,如果数据库连接池不是线程安全的,或者数据库服务器本身无法有效地处理并发连接,则引入多线程可能没有好处。

1:使用异步方式 进行手机号解密–消耗时间1秒

但是,在后台中无法显示手机号

2:使用多线程进行手机号进行解密,消耗时间3秒

3使用多进程来进行手机号解密–直接报错

额,我技术差

4:普通调用对手机号进行解密:消耗3秒

结论:普通调用就好,不用多线程,多进程,异步了

django admin后台中进行多个手机号解密消耗时间对比,django,数据库,sqlite
django admin后台中进行多个手机号解密消耗时间对比,django,数据库,sqlite

django admin后台中进行多个手机号解密消耗时间对比,django,数据库,sqlite

django admin后台中进行多个手机号解密消耗时间对比,django,数据库,sqlite

1:使用异步方式 进行手机号解密–消耗时间1秒
但是,在后台中无法显示手机号

    # -------------------------------------------------------------------------------------
    # 手机号解密
    # 使用异步方式



    async def decrypt_data_async(self, data):
        # 读取私钥文件
        private_key="""-----BEGIN RSA PRIVATE KEY-----
ekDfPc/BqzRSIkACEijwdnf7NhQveCAiE+aj5NiGkwS/zjX9S96v0qK5SFil6y+c
EXv1GMN54aCmiHWBGq86tOKjV9M4hnlVpuRJPeHi52nAyHpJfmB7
-----END RSA PRIVATE KEY-----"""
        key = serialization.load_pem_private_key(private_key.encode(), password=None, backend=default_backend())
        decrypted_data = key.decrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                                    algorithm=hashes.SHA256(), label=None)).decode('utf-8')
        return decrypted_data


    async def get_shoujihao(self):
        if len(self.shoujihao) >= 20:
            shoujihao1 = self.shoujihao
            shoujihao1 = base64.b64decode(shoujihao1)
            # Split the data into chunks for parallel decryption
            chunk_size = 8000  # Adjust the chunk size based on your data
            chunks = [shoujihao1[i:i + chunk_size] for i in range(0, len(shoujihao1), chunk_size)]
            # Use asyncio.gather to concurrently decrypt chunks
            decrypted_chunks = await asyncio.gather(*(self.decrypt_data_async(chunk) for chunk in chunks))
            # Concatenate the decrypted chunks
            decrypted_data = ''.join(decrypted_chunks)
            color_code = 'green'
            return format_html('<span style="color:{};">{}</span>', color_code, decrypted_data)
        else:
            color_code = 'green'
            return format_html('<span style="color:{};">-</span>', color_code, )

    get_shoujihao.short_description = '手机号'

    # -------------------------------------------------------------------------------------

2:使用多线程进行手机号进行解密,消耗时间3秒

# --------------------------------------------------------------------------------------
# 使用多线程进行解密
from concurrent.futures import ThreadPoolExecutor
# --------------------------------------------------------------------------------------
    # -------------------------------------------------------------------------------------
    # 手机号解密
    # 使用了多线程方式去进行解密
    def get_shoujihao(self):
        # 1:获取到数据库中的字符串 a
        # 2:把字符串转换成字节类型 b
        # 3:对字节b进行解密为 c
        # 4:返回c
        if len(self.shoujihao)>=20:
            shoujihao1=self.shoujihao
            shoujihao1 = base64.b64decode(shoujihao1)

            # 读取私钥文件
            private_key="""-----BEGIN RSA PRIVATE KEY-----
ekDfPc/BqzRSIkACEijwdnf7NhQveCAiE+aj5NiGkwS/zjX9S96v0qK5SFil6y+c
EXv1GMN54aCmiHWBGq86tOKjV9M4hnlVpuRJPeHi52nAyHpJfmB7
-----END RSA PRIVATE KEY-----"""
            key = serialization.load_pem_private_key(private_key.encode(), password=None, backend=default_backend())
            def decrypt_data(data):
                return key.decrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                                      algorithm=hashes.SHA256(), label=None)).decode('utf-8')
            # 将数据拆分为块以进行并行解密
            chunk_size = 1000  # 根据数据调整区块大小
            chunks = [shoujihao1[i:i + chunk_size] for i in range(0, len(shoujihao1), chunk_size)]

            # 使用 ThreadPoolExecutor 进行并行解密
            with ThreadPoolExecutor() as executor:
                decrypted_chunks = list(executor.map(decrypt_data, chunks))

            # 连接解密的块
            decrypted_data = ''.join(decrypted_chunks)

            color_code = 'green'
            return format_html('<span style="color:{};">{}</span>', color_code, decrypted_data)

        else:
            color_code = 'green'
            return format_html('<span style="color:{};">-</span>', color_code, )

    get_shoujihao.short_description = '手机号'

    # -------------------------------------------------------------------------------------

3使用多进程来进行手机号解密–直接报错,额,我技术差

# --------------------------------------------------------------------------------------
# 使用多进程进行解密
import logging
from concurrent.futures import ProcessPoolExecutor

logger = logging.getLogger(__name__)
# --------------------------------------------------------------------------------------
    # -------------------------------------------------------------------------------------
    # 手机号解密
    # 使用了多进程方式去进行解密



    def decrypt_data(self, data):
        try:
            # 读取私钥文件
            private_key="""-----BEGIN RSA PRIVATE KEY-----
ekDfPc/BqzRSIkACEijwdnf7NhQveCAiE+aj5NiGkwS/zjX9S96v0qK5SFil6y+c
EXv1GMN54aCmiHWBGq86tOKjV9M4hnlVpuRJPeHi52nAyHpJfmB7
-----END RSA PRIVATE KEY-----"""
            key = serialization.load_pem_private_key(private_key.encode(), password=None, backend=default_backend())
            return key.decrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                              algorithm=hashes.SHA256(), label=None)).decode('utf-8')
        except Exception as e:
            logger.error(f"Error in decryption: {e}")
            raise
    def get_shoujihao(self):
        if len(self.shoujihao) >= 20:
            shoujihao1 = self.shoujihao
            shoujihao1 = base64.b64decode(shoujihao1)

            # 将数据拆分为块以进行并行解密
            chunk_size = 1000  # 根据数据调整区块大小
            chunks = [shoujihao1[i:i + chunk_size] for i in range(0, len(shoujihao1), chunk_size)]

            # 使用 ProcessPoolExecutor 进行并行解密
            with ProcessPoolExecutor(max_workers=2) as executor:
                decrypted_chunks = list(executor.map(self.decrypt_data, chunks))

            # 连接解密的块
            decrypted_data = ''.join(decrypted_chunks)

            color_code = 'green'
            return format_html('<span style="color:{};">{}</span>', color_code, decrypted_data)
        else:
            color_code = 'green'
            return format_html('<span style="color:{};">-</span>', color_code, )

    get_shoujihao.short_description = '手机号'

    # -------------------------------------------------------------------------------------

4:普通调用对手机号进行解密:消耗3秒文章来源地址https://www.toymoban.com/news/detail-810649.html

    # -------------------------------------------------------------------------------------
    # 手机号解密
    def get_shoujihao(self):
        # 1:获取到数据库中的字符串 a
        # 2:把字符串转换成字节类型 b
        # 3:对字节b进行解密为 c
        # 4:返回c
        if len(self.shoujihao)>=20:
            shoujihao1=self.shoujihao
            shoujihao1 = base64.b64decode(shoujihao1)

            # 读取私钥文件
            private_key="""-----BEGIN RSA PRIVATE KEY-----
ekDfPc/BqzRSIkACEijwdnf7NhQveCAiE+aj5NiGkwS/zjX9S96v0qK5SFil6y+c
EXv1GMN54aCmiHWBGq86tOKjV9M4hnlVpuRJPeHi52nAyHpJfmB7
-----END RSA PRIVATE KEY-----"""
            key = serialization.load_pem_private_key(private_key.encode(), password=None, backend=default_backend())
            decrypted_data = key.decrypt(shoujihao1, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                                                      algorithm=hashes.SHA256(), label=None))
            # decrypted_data 的类型为字节
            decrypted_data=decrypted_data.decode('utf-8')
            # decrypted_data.decode()之后的类型为字符串
            shoujihao1=decrypted_data
            # print("类型")
            # print(type(decrypted_data))
            # print(decrypted_data)

            # 打印解密后的消息
            color_code = 'green'
            return format_html('<span style="color:{};">{}</span>', color_code, shoujihao1)
        else:
            color_code = 'green'
            return format_html('<span style="color:{};">-</span>', color_code, )

    get_shoujihao.short_description = '手机号'

    # -------------------------------------------------------------------------------------

到了这里,关于django admin后台中进行多个手机号解密消耗时间对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信手机号授权解密失败问题现象和解决方法: getPhoneNumber

    用uniapp 方式获取微信手机号授权,前后花了很大精力在解决解密手机号失败情况,此处加以说明,希望碰到类型情况的网友出坑: button open-type=\\\"getPhoneNumber\\\" @getphonenumber=\\\"getPhoneNumber\\\"微信快捷登录/button 1,第1种解密失败: 问题现象: 第一次解密失败,第二次成功 解决方法:

    2024年02月12日
    浏览(49)
  • 在ECSHOP后台会员列表添加手机号查询功能的方法

    一般在ecshop中注册的会员都会有手机号码,我们通过后台管理会员信息,有时候只知道一个手机号码,而不知道用户注册的用户名,通过后台现有的功能就无法查询到会员的信息,那么如何在ECSHOP后台会员列表添加手机号查询功能呢? 修改系统文件 首先修改程序文件  admi

    2023年04月16日
    浏览(45)
  • 微信小程序中获取用户手机号密文数据解密报错问题

    微信小程序获取手机号,官方通常会返回密文数据给我们,此时就需要我们自行解密数据。在揭秘的数据过程中会发现,第一次授权获取手机号会出现错误,再次获取的时候就能够正常获取。 错误信息一般分两种: 密文后端解密的 javax.crypto.BadPaddingException: pad block corrupted(后

    2024年02月15日
    浏览(62)
  • 如何通过QQ进行手机号溯源

    Q绑在线查询: http://2k.24kz.cn/ 如果上述的网址查询不到信息的号。会提示说没有找到 可能说明数据库中并无该qq号所绑定手机号的信息 开始正题: 第一步:点击添加账号,复制其QQ账号进入点击忘记密码,便可查看其手机前3位以及后两位 输入账号 下一步 第二步:使用查询

    2024年02月06日
    浏览(35)
  • Java获取微信小程序code获取openid、session_key、unionid,获取授权信息解密获取手机号

    WechatUtils (具体实体类自己根据自己的业务需求配置就行) service impl实现类 👆这个代码已经可以解析出code信息,具体的业务流程自己去添加就ok 还是我们之前的WechatUtils,在里面添加getPhone方法 service impl实现类 👆以上就是本次的笔记了,大家有需要用的自取,有用记得点个赞

    2024年02月16日
    浏览(49)
  • uni-app微信小程序获取手机号授权登录(复制即用,js完成敏感数据对称解密,无需走服务端处理)

    目录 一、示例 二、具体实现说明 获取到的手机号 属性说明 属性名 说明 生效时机 @getphonenumber 获取用户手机号回调 open-type=\\\"getPhoneNumber\\\"  按钮写法 接口说明 接口 说明 wx.login() 获取登录凭证(code),通过凭证进而换取用户登录态信息 auth.code2Session 登录凭证校验 参数说明

    2024年02月10日
    浏览(55)
  • 小程序js(正则表达式):文本框对手机号进行标准化规范

      /^1[3456789]d{9}$/ 是一个正则表达式,用于匹配手机号码的格式。 具体解释如下: /  是正则表达式的开始和结束标记。 ^  表示匹配字符串的开头。 1  表示要匹配的字符串必须以数字 1 开头。 [3456789]  表示下一位的数字必须是 3、4、5、6、7、8 或 9 中的一个。 d  表示匹配

    2024年02月05日
    浏览(48)
  • 2022.9.17 vue、element-ui实现登录获取手机验证码,进行手机号校验、验证码CD60秒

    1、直接点击,不为空校验 2、输入手机号格式不正确时 3、获取完验证码进行读秒 三、vue 1、进行手机号校验关键在对单个手机号输入框进行校验,需要使用到validateField对部分表单字段进行校验,valid是校验完的提示信息,当valid为空时代表校验成功 2、读秒和设置禁用,在校

    2024年02月11日
    浏览(47)
  • 注意:小程序获取手机号要收费了——手机号快速验证

    自2023年8月26日起,小程序获取手机号组件将需要 付费使用 。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 新版本组件不再需要提前调用wx.login进行登录。 代码示例 返回参数说明 code,动态令牌。可通过动态令牌换取用户手机号。使用方法详情phonen

    2024年02月15日
    浏览(47)
  • 前端Vue手机号校验及后端Java手机号校验

    大家好! 今天给大家分享的知识是前端Vue手机号校验以及后端Java进行手机号校验,这两个也是我在开发过程中遇到的问题,现在来给大家分享一下我的解决办法。 在这里我写了一个很简单的小例子,大家可以参考一下,在此基础上进行改进,代码如下: 关键代码都有注释,

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包