是否有任何正则表达式来查找值是否为哈希图?

问题描述 投票:0回答:1

是否有任何正则表达式来查找值是否为哈希图?

我想构建一个PL / SQL函数来说一个值是否被散列?

例如1. TIM 2. F6099C0932D0E2B13286218F99C265975B33FD84

我的Regex应该有能力告诉我表达式1(Tim)没有进行哈希映射。而表达式2(F6099C0932D0E2B13286218F99C265975B33FD84)进行了哈希映射。

regex oracle encryption hash md5
1个回答
0
投票

散列只是特定大小的许多位。密码散列通常具有256到512位的输出大小,以实现约128-256位的安全性以实现抗碰撞性。

在散列图中使用的其他哈希值可能会较小,因为通常不需要耐碰撞性;相反,散列只需要很好地分布,这样散列值就可以平均分布。

计算机通常只寻址字节,而不是位。因此,哈希通常是8位的倍数。甚至更一般地,它们通常是两个或两个或三个或两个的幂加在一起(对于128 + 32位,为160位)。

现在要查看那些分布良好的字节,我们需要某种方式使用可打印字符来查看这些位值。一种方法是使用基数64。但是,对于这些相对较短的值,通常首选十六进制,这就是您所要解决的问题。

所以您可以查看它是否为哈希值吗?好,是的,不是。您很有可能会看到它是一个40个字符的十六进制值,它代表 20个字节或20 * 8 = 160位值。我们还可以“看到”它分布得很好,并且不对可打印ASCII进行编码(因为有些值在7E十六进制以上)。

使用正则表达式测试内容为(大写或小写)十六进制非常容易。 160位为40个字符也应该很容易。但是,要使用正则表达式测试它确实是一个分布均匀的值实际上是不可能的。对于任何程序代码来说,这都不容易,因为“随机”值有时可能会令人惊讶地看起来是非随机的。除此之外,不仅哈希由分布良好的字节值组成。密文和-当然-随机字节值应具有相似的属性。

所以,是的,您可以验证输出格式是否与哈希值兼容,但是实际上无法测试它是否是哈希值。

© www.soinside.com 2019 - 2024. All rights reserved.