首页
学习
活动
专区
工具
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.6K10

高性能链设计

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

2.8K51

系统设计: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),它可以预先生成随机六个字母字符串,并将它们存储在数据库中(我们称之为密钥数据库)。

5.8K164

URL短网址生成算法原理

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

4.4K40

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.6K20

md5加密介绍以及phpmd5漏洞

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

1.8K10

md5加密介绍以及phpmd5漏洞

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

3.1K20

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

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

15K30

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

诀窍:原始MD5哈希在SQL中是危险 在这个挑战中诀窍是PHPmd5()函数可以以十六进制或原始形式返回其输出。...这md5()是方法签名: 字符串md5字符串$ str [,布尔$ raw_output = false]) 如果MD5第二个参数是true,它将返回丑陋原始位,而不是一个很好十六进制字符串...我用这个事实来创建包含SQL注入代码原始MD5哈希。 但是这可能需要几年时间来计算 为了花更少时间蛮力强制MD5哈希,我试图想到尽可能SQL注入。...我想出了一个只有6个字符: “|| 1;# 我很快写了一个C程序,看看我可以蛮力MD5有多快。我上网本可以使用libsslMD5函数每秒计算大约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位字符串,这个字符串变化很多,是1632次方,基本上可以保证唯一性...,Short Url,映射,哈希 参考资料: 1、微博地址原理解析 2、微博域名原理及作用 3、Yours.org 4、Free PHP URL Shorten script that kicks

1.6K10

「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,可能会出现哈希冲突。

34920

短网址(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 位 码,三位码开始生成

4.8K40

字节二面: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 如何缩短域名?

1.7K30

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

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

1.1K100

短网址系统设计

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

30851

链接原理及其算法实现

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

4.1K40

转 (总结)密码破解之王: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兆密码

5.1K10

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

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

83480

.Net如何将“数字(或)字符串”加密成“字符串”,作链接之类等用处

概述 本文为.NET开发者们分享一款轻量级开源数字编码成字符串加密(ID生成)工具类库—Hashids.net。...另外,还有一些场景,为了隐藏后端真实ID,在显示到客户端时,对真实ID进行加密处理,将真实数字加密生成一个字符串,比如国外知名视频网站油管视频地址类似https://www.yt.com/watch...当然,你也可以将转换后字符串再次转换成数字或者数字数组。这在将多个参数捆绑成一个参数、隐藏实际ID或简单地将它们用作字符串ID时非常有用。...Hashids.net主要有如下特性: 将整数转换成惟一ID(仅支持包含零在内正整数) 为自增ID生成不可推测非连续id 支持单个数字数字数组 允许自定义字母和盐 允许指定最小哈希长度 Hashids.net...可逆算法生成字符串长度较长,而不可逆算法生成字符串长度较短。 使用算法自动生成字符串可能存在字符串冲突问题,即不同字符串可能生成相同字符串

52650

最近学到链接」知识

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

1.6K40
领券