为啥需要MD5加密的时候用str(i)而不是“i”

#题目要求:
#生成 0~999999 所有整数组成密码的哈希值
#将上面生成的哈希值保存为映射类型
#通过查表的方式,计算下面 3 个哈希值对应的明文密码

#友情提示:hashlib.md5() 的参数是需要一个 b 字符串(即 bytes 类型的对象),这里可以使用 bytes("123", "utf-8") 的方式将 "123" 转换为 b"123"。


import hashlib

    

rainbow_table = {}

    

for i in range(1000000):

    bstr = bytes(str(i), "utf-8")

    s = hashlib.md5(bstr).hexdigest()

    rainbow_table[s] = i

    

s1 = "021bbc7ee20b71134d53e20206bd6feb"

s2 = "e10adc3949ba59abbe56e057f20f883e"

s3 = "655d03ed12927aada3d5bd1f90f06eb7"

    

print(f"{s1} 对应的明文是:{rainbow_table[s1]}")

print(f"{s2} 对应的明文是:{rainbow_table[s2]}")

print(f"{s3} 对应的明文是:{rainbow_table[s3]}")

为啥上面代码里bstr = bytes(str(i), "utf-8"),str(i)不用str就会报错,用“i”也不行。

在这段代码中,`str(i)` 的作用是将整数 `i` 转换成字符串。这是因为 `hashlib.md5()` 函数需要接收一个字节串(`bytes` 类型)作为输入。而 `i` 是一个整数,它不能直接传递给 `hashlib.md5()`,需要先将其转换成字符串形式,再将字符串转换为字节串。

具体的步骤是:
1. `str(i)`:将整数 `i` 转换为字符串(例如 `i = 5` 转换成 `"5"`)。
2. `bytes(str(i), "utf-8")`:将字符串 `"5"` 转换为 UTF-8 编码的字节串(例如 `"5"` 转换成 `b"5"`),这是因为 `hashlib.md5()` 函数要求输入必须是字节串。

如果不使用 `str(i)`,直接使用 `i`,会导致类型错误,因为 `hashlib.md5()` 无法处理整数类型。通过将 `i` 转换为字符串并进一步转换为字节串,就可以正确计算 MD5 哈希值。

总结一下:`str(i)` 主要是为了将整数 `i` 转换成字符串,然后再转换为字节串,确保能够传递给 `hashlib.md5()`。

你提到的“用双引号解决”可能是指直接使用双引号包裹一个数字,比如 "i",而不是 str(i)。但实际上,双引号包裹的 "i" 是一个字符串字面量,表示的是字符 'i',而不是数字 i。

为什么不能直接使用 "i"?

如果你写成:

bstr = bytes("i", "utf-8")

这将会创建一个字节串 b"i",它代表的是字符 'i' 的 UTF-8 编码,而不是数字 i 的 UTF-8 编码。这样就和你的需求不匹配,因为 i 是一个整数,而你需要的是将这个整数转换成对应的字符串形式,再转成字节串。

正确的方式:

bstr = bytes(str(i), "utf-8")

str(i) 将整数 i 转换成字符串(比如 i = 5 时,str(5) 就是 "5")。

然后通过 bytes(str(i), "utf-8") 将这个字符串转换成字节串(b"5")。

这个过程确保了 i 转换成字符串后,再转化为字节串,进而计算 MD5 哈希值。

总结:

"i" 是字符串字面量 'i',表示的是字符 'i',而不是数字 i。

str(i) 是将数字 i 转换为字符串(如 "5"),然后再转成字节串传给 hashlib.md5()。

因此,必须使用 str(i),而不能简单地用双引号包裹 i。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景 公司是非煤采矿业,核心业务是采选,大型设备多,安全风险因素多。当下政府重视安全,头部技术企业的安全解决方案先进但价格不低,作为民营企业对安全投入的成本很敏感。利用我本身所学,准备搭建公司的…

(7) 探索Python函数的无限可能:从递归到Lambda的奇妙之旅

欢迎进入Python编程的奇幻世界!在这个课程中,我们将一起探索编程的乐趣,通过生动有趣的方式,培养编程的逻辑思维和创造力,该课程适合有一定基础的中学及以上学生及成年人。 以下是我们课程的大纲: 【Python:趣味编程,探索未来】 目录 1. 前言2. 认识我们的“魔法咒语”…

【深度学习|目标跟踪】DeepSort 详解

DeepSort详解 1、Sort回顾2、DeepSort的状态向量3、DeepSort的外观特征4、DeepSort的track状态5、DeepSort的代价矩阵以及门控矩阵6、DeepSort的级联匹配 1、Sort回顾 查看这篇博客 2、DeepSort的状态向量 Sort中的卡尔曼滤波使用的目标的状态向量是一个7维的向量&#xff0c…

MetaGPT实现多动作Agent

异步编程学习链接 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 教程地址 多动作的agent的本质是react,这包括了think(考虑接下来该采取啥动作)act(采取行动) 在MetaGPT的examples/write_…

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式3.1 注解方式基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听…

E. Counting Arrays

题意:给定一个长度为n,要求乘积为m,其中组成m的数要求是整数 思路:首先有个很显然的想法:设表示前i个点乘积为j的最小值。因为询问数很多,所以必须离线把所有的东西都处理出来。 转移:&#x…

Leetcode 生命游戏

以下是上述Java代码的算法思想及其逻辑的中文解释: 算法思想 这段代码实现了LeetCode第289题“生命游戏”的解决方案。核心思想是: 利用原地修改的方式(in-place)存储下一状态的变化: 通过引入额外的状态值&#xff0…

文件管理 IV(文件系统)

一、文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。文件系统有两个不同的设计问题:第一个问题是,定义文件系统的用户接口,它涉及定义文件及其属性、所允许的…

单神经元 PID 解耦控制

单神经元 PID 解耦控制是一种将单神经元自适应控制与解耦控制相结合的方法,适用于多输入多输出(MIMO)系统。其核心是利用单神经元的自适应能力实现 PID 参数在线调整,同时通过解耦策略减少变量之间的相互影响,提高控制…

【青牛科技】电流模式PWM控制器系列--D4870

概述: D4870是用于开关电源的电流模式PWM(PWM)控制器系列产品。 该电路待机功耗低,启动电流低。在待机模式下,电路进入间歇工作模式,从而有效地降低电路的待机功耗。 电路的开关频率为 65KHz,抖动的振荡频率&…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介:介绍 TM-16多线激光雷达 在8210A载板,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。 大家好,…

计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…

【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器

1.实验目的 通过实验课程与理论课的学习深入理解掌握的触发器的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用触发器来进行数据库的应用程序的设计;深入学习深刻理解与触发器相关的T-SQL语句的编写的基…

小程序24-滚动效果:scroll-view组件详解

在微信小程序中如果想实现内容滚动,需要使用 scroll-view 组件 scroll-view:可滚动视图区域,适用于需要滚动展示内容的场景,用户可以通过手指滑动或者点击滚动条滚动内容。 scroll-x允许横向滚动scroll-y允许纵向滚动 实现横向…

Leetcode 分发糖果

这段代码的算法思想是 贪心算法,通过两次遍历,分别从左到右、从右到左调整糖果分配,以满足题目中相邻评分较高的孩子必须获得更多糖果的要求,并最终计算出最少需要分配的糖果总数。 以下是代码的详细思想与执行过程: …

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性,提出了数据资产运营的“三要素”(组织与意识、流程与规范、平台与工具)和“四重奏”(数据资产盘点、评估、治理、共享)…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…

linux安装mysql57——笔记

rpm -qa | grep mysql有东西就rpm -e 文件名 下载 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql-community-server如果出现Error: GPG c…

基于Java Springboot高校会议室预订管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…