Php 用我自己的散列码安全吗?

Php 用我自己的散列码安全吗?,php,database,hash,passwords,Php,Database,Hash,Passwords,将我的网站密码存储在我的数据库中,并用我自己的代码散列,安全吗?哈希代码是用php编写的,下面是一些示例: a-bnÿ和%a'T«•TÀ a、 -mf‡=ä^ö™b­±kª a!-ž'6è7õp¼Y+ 123456-Š-ÃËzooñQÈÌ8 堆垛溢出-“0µ”ÒÖ-œ” hased值始终为16个字符。根据我的说法,它可以散列多达10^96个不同的散列,并且需要花费一些时间来破解。我可以在我的网站上使用这个吗?总结一下评论中通常提到的内容: 默默无闻的安全不是保护。首先,如果您的哈希数据库泄

将我的网站密码存储在我的数据库中,并用我自己的代码散列,安全吗?哈希代码是用php编写的,下面是一些示例:

a-bnÿ和%a'T«•TÀ

a、 -mf‡=ä^ö™b­±kª

a!-ž'6è7õp¼Y+

123456-Š-ÃËzooñQÈÌ8

堆垛溢出-“0µ”ÒÖ-œ”


hased值始终为16个字符。根据我的说法,它可以散列多达10^96个不同的散列,并且需要花费一些时间来破解。我可以在我的网站上使用这个吗?

总结一下评论中通常提到的内容:

  • 默默无闻的安全不是保护。首先,如果您的哈希数据库泄漏,那么您的源代码也可能可以访问。如果不是这样的话,人们可以进行实验,或许可以对算法进行逆向工程。如果你能想出来,其他人也能
  • 散列必须有足够大的密钥空间,以尽可能避免冲突。显然,从字母表的大小来看,你已经涵盖了这一点,但我们不知道你的算法的抗碰撞能力如何
  • 散列必须足够昂贵,以使快速散列大量值变得不可行。在您的案例中,我们不知道这一点,但因为您没有明确强调这是一项功能,所以我认为这很快。这意味着攻击者将尽可能快地散列所有可能的密码。注意,散列值的字母表有多大与此无关;只有要散列的值的数量乘以散列一个值所需的时间才相关
  • 哈希不得存在允许进一步缩短哈希时间的快捷方式,甚至允许有针对性地反向工程值的漏洞。从您提供的有关散列的信息来看,我们对此一无所知


话虽如此,如果你的网站是非常低调的,那么仅仅因为它是模糊的(哎呀,模糊的安全性),没有人关心,就足够了。如果有一天,一个足够熟练的攻击者对你的特定站点和哈希算法感兴趣,那么你很可能完蛋了。

你说的“用我自己的代码哈希”是什么意思?如果你的意思是你已经编写了自己的哈希算法:不要这样做。使用一个标准的。除非你是这方面的专家,否则很可能它并不像你想象的那么安全。这个问题似乎离题了,因为通过查看几个样本值的输出不可能评估哈希的安全性。我引用Bruce Schneier的话:“从初学者到专家,任何人都可以发明一种他们自己无法破解的密码系统。"... 因此,你依赖于隐蔽性的安全性——相信没有人能够破坏你的算法,因为他们看不到它:但如果我们看不到你的算法,我们无法评估你是否应该在你的网站上使用它,只是建议不要基于自制加密很少是安全的(你可能是个例外,但我们不知道)你不愿意分享你的算法是对不安全性的怀疑你能生成多少可能的散列值并不重要,重要的是你每秒能散列多少密码。使用像MD5这样的算法,你可以用一个普通的GPU每秒计算大约8G的散列数,这样你就可以强行使用整个英文字典了你只需要几分之一毫秒。