首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建MD5的变体

创建MD5的变体
EN

Security用户
提问于 2012-10-08 09:51:51
回答 3查看 2K关注 0票数 -8

我也问过类似的Q 这里

为了创建

的MD5变体,我做了以下更改:

  1. MD5使用非线性sin(i)* pow(2,32) ->i平面使用cos(i)*pow(2,32)
  2. 相反,A,B,C,D的原始值是四个初始种子(或状态),在输入文本的处理过程中会发生额外的变化。
  3. 此外,我还会更改代码函数。F,G,H,I(在MD5's RFC中)与任何其他在SHA r中使用的。

我只想知道,MD5的属性会受到什么影响。

我想使用变体作为一个好的哈希函数。我不使用Md5's变体进行认证。

虽然,我已经使用上面的想法创建了四种变体,并使用10到20分钟的时间输入来检查它,并且它工作得很好。我做得对吗?

EN

回答 3

Security用户

发布于 2012-10-08 22:12:39

简短答覆:

很可能,您的RNG看起来是随机的,但没有通过最简单的测试(范围测试、平均测试、方差测试、桶测试)。为什么要问我们?统计博士有大量简单的代码测试专门为RNGs设计,去测试您的算法。

较长的答覆:

永远不要,永远,永远不要使用自己的密码算法。几乎可以肯定的是,你没有必要的技能来安全地做它。相反,调查可用的算法,确定哪一个满足您的需求,然后确保正确地使用IT。

在这种情况下,如果您不喜欢您可以使用的密码库中的选项,请搜索密码PRNG (伪随机数生成器),并找到一种方法获得一些相当好的种子(不,当前时间不是一个好种子,至少如果它是唯一的种子)。

像MD5、SHA-1和Keccak (SHA-3)这样的哈希函数不是很好的随机数生成器.它们不是为此目的而设计的,并且没有通过最基本的RNG测试。如果您想了解更多关于RNG测试的信息,搜索RNG测试将提供更多信息。大多数安全RNG都是在安全PRNG之上实现的,并且提供了良好的种子。种子可以被哈希化,但是散列不会增加种子或PRNG的安全性。种子是用熵测量的,熵等于不可猜测的比特(信息).然而,比特的总数并没有增加熵。这就是为什么现在的时间不是一个非常安全的种子。是的,它是独特的(大部分时间),但如果外人可以用良好的猜测来预测种子时间,那么他们也可以预测你的PRNG的产量!

“重复应该很少见”--我不知道这是什么意思,但是您可以使用来自RNG的非常长的输出(512 - 1024位),或者您正在尝试实现其他一些算法(比如从一张牌中选择卡片)。

票数 7
EN

Security用户

发布于 2012-10-08 23:30:38

您不应该实现自己的加密技术。使用现有的密码安全随机数发生器.

MD5不是随机数生成器。不仅它(或者您可能创建的任何变体)不会通过基本的随机性测试,而且它仍然需要一个随机的输入,并且输出只会和您提供的输入一样随机。

票数 3
EN

Security用户

发布于 2012-09-15 14:02:45

如果您需要一个唯一的哈希函数,最常见的做法是使用标准算法使用自己的唯一盐类--这样就不会因为混淆其内部数学而意外地使哈希变得更弱。

您可以将该盐类附加到您的明文中:

代码语言:javascript
复制
hashSHA256('thing to hash' + 'my secret salt UYT23gje6t21313d72')
票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/21277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档