关于micropython无法计算MD5的问题 AttributeError: ‘module‘ object has no attribute ‘md5‘

2023-11-02

不可能,绝对不可能!
我大MPY不能算md5?
我一试还特么真是!
文档写的明明白白,一跑就是没有方法
AttributeError: ‘module’ object has no attribute ‘md5’
mpy!你在干什么?这个错误好几年没有修!真欺负没几个人用这个方法么?

一顿操作猛如虎中。。。

两种思路:
一是重新编译固件
在这里插入图片描述
据说关了是因为省内存???WTF?

二、我就知道你懒得或者不会编译固件,喂饼,拿去吧

"""
Copyright [2018] [Mauro Riva <lemariva@mail.com> <lemariva.com>]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
based on https://rosettacode.org/wiki/MD5/Implementation#Python
adapted for MicroPython
"""

rotate_amounts = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
                  5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20,
                  4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
                  6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]

#constants = [int(abs(math.sin(i+1)) * 2**32) & 0xFFFFFFFF for i in range(64)] # precision is not enough
constants = [3614090360, 3905402710, 606105819, 3250441966, 4118548399, 1200080426, 2821735955, 4249261313,
             1770035416, 2336552879, 4294925233, 2304563134, 1804603682, 4254626195, 2792965006, 1236535329,
             4129170786, 3225465664, 643717713, 3921069994, 3593408605, 38016083, 3634488961, 3889429448,
             568446438, 3275163606, 4107603335, 1163531501, 2850285829, 4243563512, 1735328473, 2368359562,
             4294588738, 2272392833, 1839030562, 4259657740, 2763975236, 1272893353, 4139469664, 3200236656,
             681279174, 3936430074, 3572445317, 76029189, 3654602809, 3873151461, 530742520, 3299628645,
             4096336452, 1126891415, 2878612391, 4237533241, 1700485571, 2399980690, 4293915773, 2240044497,
             1873313359, 4264355552, 2734768916, 1309151649, 4149444226, 3174756917, 718787259, 3951481745]

init_values = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]

functions = 16*[lambda b, c, d: (b & c) | (~b & d)] + \
    16*[lambda b, c, d: (d & b) | (~d & c)] + \
            16*[lambda b, c, d: b ^ c ^ d] + \
            16*[lambda b, c, d: c ^ (b | ~d)]

index_functions = 16*[lambda i: i] + \
    16*[lambda i: (5*i + 1)%16] + \
                  16*[lambda i: (3*i + 5)%16] + \
                  16*[lambda i: (7*i)%16]

def left_rotate(x, amount):
    x &= 0xFFFFFFFF
    return ((x<<amount) | (x>>(32-amount))) & 0xFFFFFFFF

def md5(message):
    message = bytearray(message) #copy our input into a mutable buffer
    orig_len_in_bits = (8 * len(message)) & 0xffffffffffffffff
    message.append(0x80)
    while len(message)%64 != 56:
        message.append(0)
    message += orig_len_in_bits.to_bytes(8, 'little')
    #print (message)

    hash_pieces = init_values[:]

    for chunk_ofst in range(0, len(message), 64):
        a, b, c, d = hash_pieces
        chunk = message[chunk_ofst:chunk_ofst+64]
        #print(a, b, c, d)
        for i in range(64):
            f = functions[i](b, c, d)
            g = index_functions[i](i)
            #print(constants[i])
            to_rotate = a + f + constants[i] + int.from_bytes(chunk[4*g:4*g+4], 'little')
            new_b = (b + left_rotate(to_rotate, rotate_amounts[i])) & 0xFFFFFFFF
            a, b, c, d = d, new_b, b, c
            #print(to_rotate)

        for i, val in enumerate([a, b, c, d]):
            hash_pieces[i] += val
            hash_pieces[i] &= 0xFFFFFFFF
    return sum(x<<(32*i) for i, x in enumerate(hash_pieces))

def digest(message):
    digest = md5(message)
    raw = digest.to_bytes(16, 'little')
    return '{:032x}'.format(int.from_bytes(raw, 'big'))
    #return raw

#examples
print(digest(b'jd3096'))



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于micropython无法计算MD5的问题 AttributeError: ‘module‘ object has no attribute ‘md5‘ 的相关文章

随机推荐

  • SpringBoot配置Mybatis的两种方式(通过XML配置和通过YML配置文件配置)

    一 通过XML的方式配置Mybatis 在 src main resource下创建Mybatis配置文件 mybatis config xml 和 映射文件目录mapper 在application yml指定Mybatis配置文件 映射
  • 优化算法——全局灵敏度分析算法(PAWN )(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 目前更新 电力系统相关知识 期刊论文 算法 机器学习和人工智能学习 支持 如果觉得博主的文章还不错或者您用得到的话 可以关注一下博主 如果三连收藏支持就更好啦 这就
  • Ceph入门到精通-ceph对于长文件名如何处理

    RADOS object with short name 上一篇博文 我们将介绍了对象相关的数据结构ghobject t 以及对象在底层文件系统存储的文件名 以及如何从文件名对应到 ghobject t对象 映射关系如下图所示 这里面有一个
  • [QT编程系列-27]:多线程机制 - 信号与槽实现不同对象之间通信的五种情形:线程内同步通信、线程内异步通信、线程间异步通信

    目录 理论基础 0 1信号与槽机制 0 2 线程的事件队列 0 3 线程的信号队列 第1种情形 主线程上下文的两个对象之间同步通信 第2种情形 主线程上下文的两个对象之间异步通信 第3种情形 子线程给主线程上下文中的对象发送异步信号 第4种
  • 香港一事无成一日游

    因工作需求 我想开一些港卡 跟老婆商量后 说办就办 参考了群友和前同事的开卡相关的经验文章 再结合小红书上的各种教程 准备去香港将此事解决 因为不太懂里面的道道 我们自己也准备了一份自认为比较周全的文档 此文档结众家之长 在出发前 文档创建
  • 关于单链表的增删查改等操作(c语言版)

    目录 1 关于单链表 2 单链表的优缺点 3 单链表的初始化 4 申请新结点 5 关于单链表的插入 尾插 6 单链表的头插 7 单链表的尾删 7 单链表的头删 8 单链表的查找 9 在某一的数字的前面插入新数据 10 在某一结点之后插入数据
  • windows10 安装mqtt服务器和client客户端进行本地调试

    一 安装mqtt服务器 使用emqx作为mqtt服务器 下载emqx windows 4 3 8 zip emqx windows 4 3 8 zip 其他版本 Directory listing for broker EMQ 解压到自定义
  • 微信小程序压缩wxml

    背景 微信小程序添加webpack压缩之后 支持js css等压缩 但是wxml没有找到对应的api 后来看到小程序可以启动自定义编译命令 兜兜转转找到了一些命令来实现wxml的压缩 记录如下 需要的伙伴自取 命令输入位置如下图 命令如下
  • 安装教程rtx2080ti_Ubuntu18.04上安装RTX 2080Ti显卡驱动

    上了RTX 2080Ti显卡后 原来Ubuntu18 04内置的驱动和PPA安装的都不运作了 安装NVidia官网下载的驱动可以跑起来 但是需要费一些周折 1 禁用系统默认显卡驱动 打开系统黑名单 sudo gedit etc modpro
  • 网页游戏《天书世界》屌丝修仙记

    天书世界修仙 无限小号刷打宝塔 得到的金钱数据对比 终极玩法 天书世界 修仙 看了一些玄幻修仙小说 主人公屌丝逆袭白富美的攻略只有一个 就是不同常人的隐藏技能 作为工程师 羡慕没鸟用 还是实践一下 看看是否有潜质 于是搞了一个网页游戏 耍耍
  • JAVA面试题汇总

    JAVA面试题汇总 一 java基础篇 1 final 关键字的作用 被 final 修饰的类不可以被继承 被 final 修饰的方法不可以被重写 被 final 修饰的变量不可以被改变 如果修饰引用 那么表示引用不可变 引用指向的内容可变
  • Mybatis中的statementType="STATEMENT"使用注意

    今天遇到如下问题 Cause com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException You have an error in your SQL syntax check the
  • vulnhub靶场 DC-1

    过程曲曲折折 中途还看了下题解才断断续续的完成这个靶场 只能说技术不到家 攻击机 kali ip 192 168 16 134 靶场 ip 192 168 16 149 首先是到vulnhub官网去下载DC 1的靶场这里就不讲如何下载了 直
  • 【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用

    目录 专栏导读 1 ORM 概述 2 SQLAlchemy 概述 3 ORM SQLAlchemy使用 3 1 安装SQLAlchemy 3 2 定义数据库模型类 3 3 创建数据表 3 4 插入数据 3 5 查询数据 3 6 更新数据 3
  • SpringBoot 系统全局异常处理

    1 编写系统全局异常处理类要求 1 定义全局异常处理类 使用 ControllerAdvice 注解标签修饰 2 处理指定异常类信息 通过 ExceptionHandler 注解标签修饰 3 处理指定异常类是否向前端返回错误信息 如果需要向
  • Restful API 的设计规范

    Restful API 的设计规范 Restful API 的设计规范 1 URI URI规范 资源集合 vs 单个资源 避免层级过深的URI 对Composite资源的访问 2 Request HTTP方法 安全性和幂等性 复杂查询 Bo
  • Effective STL学习

    引言 以下为个人的一些读书心得 对于部分比较浅显易懂的就不再赘述 只是日常使用中不太会留意到的加以解释 第一章 容器 第一条 慎重选择容器类型 第二条 不要试图编写独立于容器类型的代码 第三条 确保容器中的对象拷贝正确而高效 第四条 调用e
  • Android 模拟双击点赞脚本

    以下代码通过GPT3 5生成 bin bash 点击次数范围 CLICK COUNT MIN 20 CLICK COUNT MAX 30 每次点击间隔范围 CLICK INTERVAL MIN 3000 CLICK INTERVAL MAX
  • STM32F103C8T6在线升级 IAP

    stm32程序每次执行都会从基地址0x800 0000开始执行 IAP程序升级的执行是在bootloader引导文件执行后 进行加载 跳转APP程序 所以每次上电后进入BootLoader判断是否需要升级 如果升级则接受bin文件 如果不升
  • 关于micropython无法计算MD5的问题 AttributeError: ‘module‘ object has no attribute ‘md5‘

    不可能 绝对不可能 我大MPY不能算md5 我一试还特么真是 文档写的明明白白 一跑就是没有方法 AttributeError module object has no attribute md5 mpy 你在干什么 这个错误好几年没有修