【发布时间】: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