PHP/MySQL : Hashing common data

标签 php mysql hash sha

我正在查看我当前的数据库设置,它由大约 7 个不同表中的大量用户完整家庭地址组成,所有数据都具有不同程度的不一致数据(由于人们可以使用/输入邮政编码的方式)例如,没有空格)。

相关应用程序尚未上线 - 离完全完成不远了,但仍未上线,因此现在的任何更改都比 6 个月后表格中的数据量大得离谱要容易得多。

是否值得我花几个小时重构处理用户家庭地址的代码/数据库,而不是每次都使用哈希算法插入完整的地址? 这将为我们提供更大的一致性,并且显然可以以用户可以共享地址哈希的方式进行设置,因此我们甚至可以更轻松地通过地址搜索它们。

我们目前使用此方法来存储用户代理 - 哈希 UA 字符串并将其存储在自己的单独表中,旁边是一个中文本列,以供实际的 UA 字符串使用,然后我们将 UA 哈希存储在需要它的表中(见下文),并使用 SHA1。但是,在基于非冲突的哈希方面,我可以使用哪些选项,但您也看到了在中小型生产环境中以尽可能快的时间执行?

UA String Hash Table

这意味着两个明显的问题,MD5/SHA1 100% 不会发生,不幸的是,我并没有真正使用比这更大的哈希值。 根据记录,对于密码加密,我使用 password_hash,所以不要 panic !

显然,用户的家庭地址比用户代理字符串重要得多,这就是为什么我要询问您的建议。

谢谢

最佳答案

对于那些想知道的人,我选择了 SHA256。

我没有意识到openssl中实际上有一个函数可以对哈希算法进行基准测试,可以使用如下:openssl speed alg1 alg2 alg3等

查看下表中的 64/256 字节结果,虽然显然它的执行速度不如 MD5/SHA1,但我认为它对于生产来说仍然足够快。

我想我应该发布此内容,让任何不了解 openssl speed 的人都可以尝试一下。

[root@prod-use1a ec2-user]# openssl speed md5 sha1 sha256 sha512
Doing md5 for 3s on 16 size blocks: 9785239 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 7076501 md5's in 2.99s
Doing md5 for 3s on 256 size blocks: 3832312 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 1363911 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 194888 md5's in 3.00s
Doing sha1 for 3s on 16 size blocks: 10839355 sha1's in 3.00s
Doing sha1 for 3s on 64 size blocks: 7479305 sha1's in 2.99s
Doing sha1 for 3s on 256 size blocks: 4024302 sha1's in 3.00s
Doing sha1 for 3s on 1024 size blocks: 1478185 sha1's in 3.00s
Doing sha1 for 3s on 8192 size blocks: 227631 sha1's in 3.00s
Doing sha256 for 3s on 16 size blocks: 7984178 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 4370920 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 1904856 sha256's in 3.00s
Doing sha256 for 3s on 1024 size blocks: 589307 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 77639 sha256's in 2.99s
Doing sha512 for 3s on 16 size blocks: 6481869 sha512's in 3.00s
Doing sha512 for 3s on 64 size blocks: 6479426 sha512's in 3.00s
Doing sha512 for 3s on 256 size blocks: 2425680 sha512's in 3.00s
Doing sha512 for 3s on 1024 size blocks: 869702 sha512's in 3.00s
Doing sha512 for 3s on 8192 size blocks: 120660 sha512's in 3.00s


The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              52187.94k   151470.26k   327023.96k   465548.29k   532174.17k
sha1             57809.89k   160092.15k   343407.10k   504553.81k   621584.38k
sha256           42582.28k    93246.29k   162547.71k   201150.12k   212715.28k
sha512           34569.97k   138227.75k   206991.36k   296858.28k   329482.24k
[root@prod-use1a ec2-user]#

关于PHP/MySQL : Hashing common data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344026/

相关文章:

php - 嵌入式支付 IPN

javascript - 如何使用 jQuery 循环访问 WordPress WP_Query 对象?

mysql - 从联合查询中获取单行中的字段

c# - SHA256 可以多线程来提高速度吗?

PHP代码没有被执行,但是代码显示在浏览器源代码中

php - 使用多个内连接

java - 服务器启动错误 - SQL 语法错误

mysql - #1064 错误 : While "If Then Insert"

python - 检查python中的大列表是否已更改

Python 伪不可变对象(immutable对象)字段