今天我很难向朋友解释其中的区别。
我知道在生成“随机”字符串时会使用种子。当为哈希提供不同的结果时,会使用盐。
有什么更好的方式来描述这些概念及其可能的差异。
今天我很难向朋友解释其中的区别。
我知道在生成“随机”字符串时会使用种子。当为哈希提供不同的结果时,会使用盐。
有什么更好的方式来描述这些概念及其可能的差异。
种子:
加密是由随机数驱动的,但是如何生成真正的随机数呢?当前毫秒?正在使用的处理器线程数?你需要一个起点。这称为种子:它启动一个随机数。
盐:
当你散列一个字符串时,它总是以相同的散列结束。
foo
=acbd18db4cc2f85cedef654fccc4a4d8
每次。
当您想要存储想要真正隐藏的东西(如密码)时,这是一个问题。如果你看到acbd18db4cc2f85cedef654fccc4a4d8
你总是知道它是foo
。因此,您只需在原始字符串中添加一个“盐”以确保它是唯一的。
foo
+ asdf
=e967c9fead712d976ed6fb3d3544ee6a
foo
+ zxcv
=a6fa8477827b2d1a4c4824e66703daa9
所以'salt'通过模糊原始文本使'hash'更好。
我能想到的最简单的术语:
我喜欢使用这些,因为保密或不保密的想法对任何人都有意义。
你的朋友的困惑实际上是有道理的,因为没有太大的区别。在高层次上,每个都用作输入来修改加扰函数的输出。
尝试强调散列函数和随机数生成器之间的区别,以及它们通常用于什么。此外,能够区分用于统计的常规随机数生成器(可以使用可预测或已知的种子)和用于密钥生成的加密安全随机数生成器(需要不可猜测的熵源作为种子。 )
PRNG(seed)=一串随机数
哈希(盐+密码)=哈希密码
随机数生成器突出了计算机的基本性质。它们不是随机的。即使是感知到的随机性也不是随机的,而是接近随机的,尽管人们最终可能会拿出那个老掉牙的例子,即朝着一个目标走了一半距离却从未真正达到它。