【问题标题】:sha256 implementation in javascriptjavascript中的sha256实现
【发布时间】:2016-03-15 22:37:40
【问题描述】:

我目前正在尝试从头开始实现 sha256。

我正在实现 ch() 函数,其定义是 ch(x,y,z) = (x&y) ^ (~x&z)

(&:表示与门,^:表示异或门,~:是否定)

我是这样实现的:

function ch(x,y,z){
 (x&y) ^ (~x&z)
}

但是在我实现之后,当我看到一些其他的实现比如http://point-at-infinity.org/jssha256/时,实现是这样的(下)

function SHA256_Ch(x, y, z) {
  return z ^ (x & (y ^ z));
}

这个转换是什么?

我可以从维基百科获得相同的结果吗?

你能告诉我路径吗?

----------------------------------------------- ----------

感谢您的回答!

ch() 代表选择:x 选择 y 或 z。当 x 为 0 时,选择 z, 当x为1时,选择y

这对我来说是一个关键的句子。 我想知道 desiner 是如何找到第二种形式的 ch 函数的。

但我想,如果我得到你的建议的看法,那是显而易见的。

如果sha256的设计者想用类似的ch函数,那是有道理的。当x为零时,y为0,剩下z,因为x和z是用异或门连接的,x和y是连接的与门。当x为1时,y为y,z为空,因为有两个z与xor门相连;

我应该从构建 SHA256 算法的人的角度开始我的猜测。

多谢指教!!

口井

【问题讨论】:

  • 亲爱的米奇。对不起。虽然你帮了我很多。因为我的无知,我对你很粗鲁。正如你所建议的,我会接受你优雅的回答。有效吗?谢谢你的建议!!
  • 你并不粗鲁。只是一个新的 stackoverflower!

标签: javascript sha


【解决方案1】:

如果你写出 x、y、z 和这两个表达式的真值表,你会发现它们相同

在这两种情况下(为简洁起见,我省略了中间结果):

x  y  z  (x&y)^(~x&z)  z^(x&(y^z))
0  0  0  0             0
0  0  1  1             1
0  1  0  0             0  
0  1  1  1             1  
1  0  0  0             0  
1  0  1  0             0  
1  1  0  1             1  
1  1  1  1             1

ch() 代表选择x 选择yz。当x0时,选择z,当x1时,选择y

第二种形式少用1位运算;但我猜想任何速度改进都将是特定于实现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-07-28
    • 2019-07-15
    • 2016-04-02
    • 2014-08-01
    • 2011-05-29
    • 2020-02-25
    相关资源
    最近更新 更多