Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:散列公共数据_Php_Mysql_Hash_Sha - Fatal编程技术网

PHP/MySQL:散列公共数据

PHP/MySQL:散列公共数据,php,mysql,hash,sha,Php,Mysql,Hash,Sha,我正在查看我当前的数据库设置,它由大约7个不同的表中的大量用户完整家庭地址组成,所有这些表都有不同程度的不一致数据(例如,由于人们可以键入带有/不带空格的邮政编码) 有问题的应用程序还没有上线——离完全完成还不远,但仍然没有上线,因此,现在的任何更改都比表中数据量巨大的6个月后的更改要容易得多 我是否值得花几个小时重构处理用户家庭地址的代码/数据库,而不是每次使用哈希算法插入完整的地址? 这将给我们带来更大的一致性,而且显然可以设置为用户可以共享地址散列,因此我们甚至可以更轻松地按地址搜索它们

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

有问题的应用程序还没有上线——离完全完成还不远,但仍然没有上线,因此,现在的任何更改都比表中数据量巨大的6个月后的更改要容易得多

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

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

这意味着MD5/SHA1这两个明显的错误是100%没有发生的,不幸的是,我并没有处理比这更大的哈希值。 作为记录,对于密码加密,我使用
password\u hash
,所以不要惊慌失措

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


谢谢你们这些想知道我和SHA256一起去的人

我没有意识到openssl中实际上有一个函数来测试散列算法,它可以像这样使用:
openssl速度alg1 alg2 alg3等

查看下表中的64/256字节结果,尽管它的执行速度显然不如MD5/SHA1快,但我认为它仍然足够快,可以用于生产

我想我应该发布这篇文章,让任何不了解
openssl速度的人试一试

[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]#

“基于非冲突的哈希”-你是什么意思?两个不同字符串的散列值永远不应该相等?@PaulSpiegel你是对的,它们不应该相等,但在MD5/SHA1的情况下,这是不正确的。请参阅,我不是专家,但这些函数仅适用于预先定义的字符串集。但是你为什么不直接使用主键作为参考呢?你不能用一个自动递增键创建一个地址表,并在任何需要地址的地方使用这个键吗?@PaulSpiegel我正在尽可能地对应用程序进行未来验证,以在未来数月/数年内避免重写,特别是像数据库这样的位,谁知道那是什么样子。据我所知(虽然不太可能),两个人的地址最终可能是相同的,那么我就有一个问题了。我也在考虑使用人工智能钥匙,但我想做一些事情,可以更快地在飞行中没有额外的拉动和搜索,这将需要。这样我就可以只搜索散列而不是每个地址列。(CC@NigelRen)