首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP - 从长md5哈希生成短字母数字字符串的好方法是什么?

PHP - 从长md5哈希生成短字母数字字符串的好方法是什么?

答:在 PHP 中,可以使用 base_convert() 函数将长字符串哈希转换为短字母数字字符串。例如,将长字符串哈希 "e85221589159194852214852214879219" 转换为短字符串 "85221-485221-4879219",可以使用以下代码:

代码语言:php
复制
$longHash = 'e85221589159194852214852214879219';
$shortHash = base_convert($longHash, 16, 36);
echo $shortHash;

base_convert() 函数接受三个参数:要转换的基数(16),要转换的基数(36)和要转换的字符串。函数将返回一个与输入字符串具有相同长度的字符串,其中每个字符都是输入字符串的相应字符,但每个字符都被替换为其在字母表中的下一个字符。

除了使用 base_convert() 函数外,还可以使用 md5() 函数生成长哈希,并使用 substr() 函数提取所需的部分。但是,由于 substr() 函数返回一个字符串,因此可能需要对其进行转换,以便将其用作数字。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何设计一个短网址系统

使用 base64 编码, 6 个字母长度可以生成 64 ^ 6 = 约 687 亿个可能的字符串,8 个字母长度可以生成 64 ^ 8 =〜281 万亿个可能的字符串。...第二种:离线生成短链接 key 我们可以有一个独立的短链接 key 生成服务(KGS :Key Generation Service),它可以生成随机的六个字母字符串,事先将它们存储在数据库中(我们称其为密钥数据库...每当我们要缩短网址时,我们将只使用一个已经生成好的字符串并使用它。这种方法会使事情变得相当简单快捷。这样就不需要对 URL 进行编码,而且不必担心重复或哈希碰撞。...这种方法称为基于范围的分区。甚至可以将某些不经常出现的字母组合,包含组合字母的 url 放到一个数据库分区中。这也是一种静态分区方案,提前规划好方案,每一个 url 存储到哪个分区都是可以预见的。...例如,我们的哈希函数总是可以将任何 url 映射到 1…256 之间的数字,该数字代表数据的分区我们,这种方法仍然会导致分区不平衡,不过这可以通过使用一致性哈希技术来解决。

1.7K10

高性能短链设计

本文将会从以下几个方面来讲解,每个点包含的信息量都不少,相信大家看完肯定有收获 短链有啥好处,用长链不香吗 短链跳转的基本原理 短链生成的几种方法 高性能短链的架构设计 注:里面涉及到不少布隆过滤器,snowflake...短链生成的几种方法 1、哈希算法 怎样才能生成短链,仔细观察上例中的短链,显然它是由固定短链域名 + 长链映射成的一串字母组成,那么长链怎么才能映射成一串字母呢,哈希函数不就用来干这事的吗,于是我们有了以下设计思路...,只要到时根据短链取出长链的时候把这些自定义好的字符串移除即是原来的长链。...用哈希算法生成的短链其实已经能满足我们的业务需求,接下来我们再来看看如何用自增序列的方式来生成短链 2、自增序列算法 我们可以维护一个 ID 自增生成器,比如 1,2,3 这样的整数递增 ID,当收到一个长链转短链的请求时...解决了发号器问题,接下来就简单了,从发号器拿过来的 id ,即为短链 id,接下来我们再创建一个长短链的映射表即可, 短链 id 即为主键,不过这里有个需要注意的地方,我们可能需要防止多次相同的长链生成不同的短链

3K51
  • 系统设计:URL短链设计

    使用base64编码,6个字母长的密钥将产生64^6=~687亿个可能的字符串使用base64编码,8个字母长的密钥将产生64^8=~281万亿个可能的字符串 对于68.7B唯一字符串,我们假设六个字母键就足以满足我们的系统...如果我们使用MD5算法作为散列函数,它将生成一个128位的散列值。在base64编码之后,我们将得到一个超过21个字符的字符串(因为每个base64字符编码哈希值的6位)。...既然我们每个短键只有8个字符的空间,那么我们将如何选择我们的键呢?我们可以用前6(或8)个字母作为钥匙。但这可能会导致密钥重复,在此基础上,我们可以从编码字符串中选择一些其他字符或交换一些字符。...解决问题的方法:我们可以向每个输入URL添加一个递增的序列号,使其唯一,然后生成一个哈希。不过,我们不需要将这个序列号存储在数据库中。这种方法可能存在的问题是序列号不断增加。它会溢出吗?...生成短链URL步骤 我们可以有一个独立的密钥生成服务(KGS),它可以预先生成随机的六个字母字符串,并将它们存储在数据库中(我们称之为密钥数据库)。

    6.3K165

    URL短网址生成算法原理

    看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想到的就是原来公司写的一个游戏激活码规则,也就是下面的算法2, 1)26个大写字母 26小写字母,10个数字,随机生成6个然后插入数据库对应一个...16进制串与0x3fffffff(30位1)与操作,即前缀超过30位的字符串做忽略处理,直接舍弃掉了; 3) 这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串; 4)...总的md5串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址; 这种算法,虽然会生成4个,但是仍然存在重复几率 PHP版本实现 1 2 3 4 5...,会产生4 组6位字符串,任意一组都可以作为当前字符串的短链接地址。...[0]:::VFvAr2 [1]:::iiI3a2 [2]:::Z3EvEv [3]:::jMjU3a PHP 随机数版 原理:指定长度,做多次循环,每次从长字符串里随机取出一位字符,组合成指定长度字符串即可

    4.6K40

    HBase RowKey 设计

    哈希的原理是计算 RowKey 的哈希值,然后取哈希值的部分字符串和原来的 RowKey 进行拼接或者完全替代。这里说的哈希包含 MD5、sha1、sha256或sha512等算法。...3.3.3 RowKey长度 RowKey 尽可能的短,但仍可用于必需的数据访问(例如,Get 与 Scan)。如果 RowKey 短的对于数据访问没有用处,那么还不如使用一个长的 RowKey。...在 RowKey 中使用某些替换是一个不错的方法。我们至少有两种方法:哈希和数字。上面主机名在 RowKey 的主要位置的示例如下所示。...LOG_TYPES的行键为: [type] 表明是主机名还是日志事件 [bytes] 主机名或事件类型的原始字节 此 RowKey 的列可以是带有指定数字的长整数,可以通过使用 HBase 计数器获得该数字...,因此生成的复合 RowKey 为: [hostname 对应的长整形] = 8 bytes [event-type 对应的长整形] = 8 bytes [timestamp] = 8 bytes 无论是哈希还是数字替换方法

    1.8K20

    md5加密介绍以及php中md5的漏洞

    结果的摘要信息格式是一致的,通常用一个短的随机字母和数字组成的字符串来代表。 密码散列函数的特点 对于任何一个给定的消息,它都很容易就能运算出散列数值。 难以用散列数值推算出原始数据。...php中md5函数的漏洞 在PHP中,我们也常将md5哈希字符串进行对比,然而却没有在意处理的细节,导致漏洞的出现。 我们在运行以下的php脚本 哈希结果全都是以0e开头的,我们来看看0e代表的是什么 首先我们了解一下科学计数法。...,有数字值,就转为数字值比较 如果比较的数据中,两边的值都为 纯数字字符串 ,就转为数字值比较 如果以上都不符合,则按常规字符串比较 那么当我们 “0e830400451993494058024219903391...” == “0” 的时候,符合第三点要求,两边都是数字字符串,会转为数字值比较,所以得到的结果是true。

    1.9K10

    md5加密介绍以及php中md5的漏洞

    结果的摘要信息格式是一致的,通常用一个短的随机字母和数字组成的字符串来代表。 密码散列函数的特点 对于任何一个给定的消息,它都很容易就能运算出散列数值。 难以用散列数值推算出原始数据。...php中md5函数的漏洞 在PHP中,我们也常将md5哈希字符串进行对比,然而却没有在意处理的细节,导致漏洞的出现。 我们在运行以下的php脚本 哈希结果全都是以0e开头的,我们来看看0e代表的是什么 首先我们了解一下科学计数法。...,有数字值,就转为数字值比较 如果比较的数据中,两边的值都为 纯数字字符串 ,就转为数字值比较 如果以上都不符合,则按常规字符串比较 那么当我们 “0e830400451993494058024219903391...” == “0” 的时候,符合第三点要求,两边都是数字字符串,会转为数字值比较,所以得到的结果是true。

    3.3K20

    如何实现一个短链接服务 | 短链接生成原理

    短链生成方法# 短码一般是由 [a - z, A - Z, 0 - 9] 这62 个字母或数字组成,短码的长度也可以自定义,但一般不超过8位。...但是短码 id 是从一位长度开始递增,短码的长度不固定,不过可以用 id 从指定的数字开始递增的方式来处理,确保所有的短码长度都一致。...同时,生成的短码是有序的,可能会有安全的问题,可以将生成的短码id,结合长网址等其他关键字,进行md5运算生成最后的短码。...6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址; 这种算法,虽然会生成4个,但是仍然存在重复几率...普通随机数 该方法是从62个字符串中随机取出一个6位短码的组合,然后去数据库中查询该短码是否已存在。如果已存在,就继续循环该方法重新获取短码,否则就直接返回。

    18.8K40

    SQL注入与原始的MD5散列(Leet More CTF 2010注入300)

    诀窍:原始MD5哈希在SQL中是危险的 在这个挑战中的诀窍是PHP的md5()函数可以以十六进制或原始形式返回其输出。...这md5()是方法签名: 字符串md5(字符串$ str [,布尔$ raw_output = false]) 如果MD5的第二个参数是true,它将返回丑陋的原始位,而不是一个很好的十六进制字符串...我用这个事实来创建包含SQL注入代码的原始MD5哈希。 但是这可能需要几年的时间来计算 为了花更少的时间蛮力强制MD5哈希,我试图想到尽可能短的SQL注入。...我想出了一个只有6个字符长: “|| 1;# 我很快写了一个C程序,看看我可以蛮力MD5有多快。我的上网本可以使用libssl的MD5函数每秒计算大约500,000次MD5哈希值。...砍掉另一个角色,并进行更多的改进 由于从1到9的任何数字都可以在我的注射中工作,所以我可以缩短我的注射线'||',然后检查注射线是否跟着1到9的数字(非常便宜的检查)。

    1.3K40

    短链接算法收集与分析

    如何实现呢,大概有三个步骤: 1、定义一个URL映射算法,可以将长的URL映射成短字符串; 2、使用一个存储(数据库?NoSQL?)...来存储完成的映射; 3、实现自己的URL映射算法; 一般来说,第三步是我们比较头疼的,如何将一个长的URL字符串,映射成一个较短的字符串呢。...我总结了三种办法: 普通实现 我想以前大家学习过十进制和二进制的互相转换,或者十进制和十六进制的互相转换,那么为了更短,我们可以使用62进制,对于一个数字ID进行转码,转换成一个短字符串。...每个字符有32种状态,六个字符就可以表示32^6(1073741824),那么如何得到这六个字符,描述如下: 对传入的长URL进行Md5,得到一个32位的字符串,这个字符串变化很多,是16的32次方,基本上可以保证唯一性...,Short Url,映射,哈希 参考资料: 1、微博短地址原理解析 2、微博短域名原理及作用 3、Yours.org 4、Free PHP URL Shorten script that kicks

    1.6K10

    短网址(short URL)系统的原理及其实现

    算法二 将长网址 md5 生成 32 位签名串,分为 4 段, 每段 8 个字节 对这四段循环处理, 取 8 个字节, 将他看成 16 进制串与 0x3fffffff(30位1) 与操作, 即超过...30 位的忽略处理 这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串 总的 md5 串可以获得 4 个 6 位串,取里面的任意一个就可作为这个长 url...的短 url 地址 这种算法,虽然会生成4个,但是仍然存在重复几率 两种算法对比 第一种算法的好处就是简单好理解,永不重复。...但是短码的长度不固定,随着 id 变大从一位长度开始递增。如果非要让短码长度固定也可以就是让 id 从指定的数字开始递增就可以了。百度短网址用的这种算法。...这样既可以区分哪些长连接是用户自己定义还是系统自动生成的,还可以不浪费被自定义短码占用的 id。 我保留了 1 到 2 位的 短码,从三位的短码开始生成的。

    5.2K40

    「System Design」设计一个短链接系统

    哈希算法 实际上,我们可以使用哈希算法和哈希表实现,如下 长链接经过哈希算法后, 会生成固定长度的哈希值 key,也就是短链接的值,并保存到哈希表中。...Base 62 转换 这是另外一种常见的方法,Base 62 字符由大写字母 A-Z、小写字母 a-z 和数字 0-9 组成, 总共 62 位,如下 base 62 和 base 64 相比,只不过少了...而 base 62 需要给每条长链接生成一个唯一的数字 ID,如下 那么如何计算短链接 ShortURL 呢?...因为 Id 是唯一的 10 进制数字,我们只需要把它转成 62 进制即可, 这里和从2进制转换到10进制是一样的。...总结 在本文中,介绍了两种实现短链接的方法,分别是哈希算法和 base 62。 哈希算法的特点是,固定的短链接长度,不需要生成唯一ID,可能会出现哈希冲突。

    41620

    字节二面:100Wqps短链系统,如何设计?

    所以,陈某分析下来,得到一个结论:是一个超级好的问题。 1、短URL系统的背景 短网址替代长URL,在互联网网上传播和引用。 例如QQ微博的url.cn,新郎的sinaurl.cn等。...一个典型的场景是, 在编码的过程中,如果不想让人明确知道转换前是什么,可以进行弱加密, 比如A站点将字母c表示32、B站点将字母c表示60,就相当于密码本了。...(剩下的1位二进制为0)表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 [1] 。...的 hash编码,得到一个 整数,作为 短链的ID 哈希算法简单来说就是将一个元素映射成另一个元素, 哈希算法可以简单分类两类, 加密哈希,如MD5,SHA256等, 非加密哈希,如MurMurHash...所以,可以把长链做 MurmurHash 计算,可以得到的一个整数哈希值 , 所得到的短链,类似于下面的形式 固定短链域名+哈希值 = www.weibo.com/888888888 如何缩短域名?

    3.9K30

    Python文档精要研读系列:hash函数

    Python中的hash函数用于求取一个字符串或者数值的哈希值,由于Python中任何数据类型都可以转换为字符串,所以我们利用这个函数来进行简单的哈希值计算,比如: hash('test') 如此便可以求得字符串...: hash(str(sorted({'1':1}))) 先将字典排序,而后转为字符串,最后求得哈希值。...,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。...该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。...好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

    1.2K100

    自建MD5解密平台-续

    使用 PHP 构建 MD5 彩虹表生成器的完整过程在信息安全领域,**彩虹表(Rainbow Table)**是一种通过预计算哈希值和对应原始值的方式来破解密码的工具。...项目背景和需求在项目的初始阶段,我们需要一个自动化生成 MD5 彩虹表的工具,并将生成的数据存储在 MySQL 数据库中。主要功能包括:**批量生成 MD5 哈希和对应的原始字符串**。...**去重处理,避免重复存储相同的 MD5 哈希**。**可扩展性**,支持任意字符集和字符串长度。**高效插入数据**,避免性能瓶颈。...PHP 脚本实现核心逻辑概述**字符集配置**:可以自由定义生成字符串所使用的字符集,包括大小写字母、数字和特殊符号。**随机生成字符串**:通过随机组合字符,生成指定长度的字符串。...结论本文通过详细介绍一个 PHP 实现的 MD5 彩虹表生成器,展示了从数据库设计到代码优化的完整流程。通过随机生成字符串、去重插入以及前端自动刷新机制,实现了高效的批量生成工具。

    7910

    短链接原理及其算法实现

    理论说完了,我们来看一下具体的实现算法步骤: 首先,获取长URL,将长url计算成md5值,判断库(这个库可以是redis或mysql获取noSql等数据库)中是否存在该md5值对应的短码,如果有,直接返回...;如果没有,将url,md5存入数据库中,并返回该条记录的id值,此ID值作为生成短链的一个依据。...然后将返回的ID转换为61进制,将字母或数字中的其中一个取出作为连接符使用,这里我们使用小写字母a,然后拼接到转换完进制的字符串后,不足六位的用随机字符补足,随机字符中也要相应的踢除掉该连接符字符,用以保证六位短码唯一...短码已经生成,直接返回就好。在之后就是输入短码来重定向了,我们可以在库中查询该短码对应的长url,然后重定向到长url地址即可。 流程图如下 ?...与操作, 即超过 30 位的忽略处理,这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串。

    5.2K40

    短网址系统设计

    发号器的设计 对于每一个长链接转短链地址时,都必须生成一个全局唯一的短链值,不然就会发生冲突。...关于如何生成全局唯一短链通常有以下思路: 利用雪花算法得到一个全局唯一ID,然后使用不可逆哈希算法对ID进行哈希,得到对应的字符串,将此字符串作为短链结果。...一个亿的数字转换后也就五六位(1亿 -> zAL6e),将短链接服务器域名,与这个字符串进行拼接,就能得到短链接的 URL,比如:t.cn/zAL6e 。...虽然用 301 浏览器只需一次请求,后续可以直接从浏览器获取长链接,这种方法可以提升访问速度,但是它没法统计短链接的访问次数。 所以根据业务需要,我们一般选用 302 重定向。...整体流程如下: 指定的服务器调用 短网址服务 对普通网址生成一个短网址; 根据普通网址进行MD5 Hash生成一个MD5码; 根据MD5码(索引)和网址从数据库里面查询短网址记录; 有记录就把更新过期时间

    48551

    转 (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)

    据实际测试,单机环境下,破解一个14位长包含大小写字母以及数字的无规律密码,一般是需要3~~9小时的,这个时间值会随着密码的复杂度及计算机性能差异提升到几天甚至数月不等。...比较新的,用的索引和压缩,所以速度更快,体积更小,而且支持分布式破解。 支持HASH类型:LM,MD5,NTLM,SHA1,HALFLMCHALL 网上有已经生成好的表可供下载,真是造福于民。...Ophcrack文档描述了它所能使用的彩虹表之间的差异: 字母数字表 10k 388MB 包含所有字母数字混合密码中99.9%的LanManager表。...这些都是用大小写字母和数字组成的密码(大约800亿组合)。 由于LanManager哈希表将密码截成每份7个字符的两份,我们就可以用该表破解长度在1到14之间的密码。...该表包含了用如下字符组成的可能密码组合的90%: ·最高6位字符由大小写字母、数字以及33个特殊字符(同上面列举的一样) ·7 大小写字母及数字 ·8 小写字母及数字 该表包含7兆种组合,对应7兆的密码

    7K10

    hash 哈希算法_哈希一致性算法

    一、哈希函数 定义 散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。...散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。...介绍 MD5 生成的哈希值是 128 比特的。这里的哈希值指的是二进制的值,而不是 HEX 或 base64 格式化后的人类可读的值。...32位的,在某些场景下,比如哈希的对象长度小于 128 位,或者存储空间要求占用小,或者需要把字符串转换成一个整数,这一特性就能帮上忙。当然,32 位哈希值发生碰撞的可能性就比 128 位的要高得多。...有趣的是,MurMurHash3 生成 32 位哈希的用时比生成 128 位哈希的用时要长。原因在于MurMurHash3_128 针对现代 x64 平台cpu进行了优化。

    95080

    最近学到的「短链接」知识

    我们先回到生成好的短链上https://dwz.cn/LwlrfG4j 虽然这个链接看起来有点奇怪,但他终究还是一个链接,从URL的特征我们可以分出: dwz.cn是域名 LwlrfG4j是参数 ?...302跳转 短链接的原理其实就是: 将长链接通过一定的手段生成一个短链接 访问短链接时实际访问的是短链接服务器,然后根据短链接的参数找回对应的长链接 重定向跳转 ?...还是不能,用Hash存在哈希碰撞的问题 什么是哈希碰撞?两个不相同的字符串(值)进行Hash操作后,得到的哈希值相同。...这就意味着,两个完全不同的长链得到的哈希值一模一样,而我的短链是依赖哈希值去找到长链的(此时一个短链对应多个长链,这不合理)。 脑子第三时间想到的是?脑子想不到了。...64进制转换倒是听得多了 62进制转换是因为62进制转换后只含数字+小写+大写字母。

    1.7K51
    领券