javascript 中的 sha256 实现
sha256 implementation in javascript
我目前正在尝试从头开始实施 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() stands for choose: x chooses y or z. When x is 0, z is chosen,
and when x is 1, y is chosen
这句话对我来说很关键。
我想知道设计器如何找到第二种形式的 ch 函数。
但我想,如果当时我得到了你的建议,那是显而易见的。
如果sha256的设计者想像这样使用ch函数,那么sense.whenx为0,y为0,z为左,因为x和z是接异或门的,x and y connected with and gate.when x is one, y is y and z is nothing, 因为有两个z与异或门相连;
我应该从构建SHA256算法的人的角度开始猜测。
多谢指教!!
口技
如果您写出 x、y、z 和 2 个表达式的真值 table,您会发现它们 相同。
在这两种情况下(为简洁起见,我省略了中间结果):
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
选择y
或z
。当x
为0
时,选择z
,当x
为1
时,选择y
第二种形式少用了1个位运算;但我猜想任何速度的改进都是特定于实现的。
我目前正在尝试从头开始实施 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() stands for choose: x chooses y or z. When x is 0, z is chosen, and when x is 1, y is chosen
这句话对我来说很关键。 我想知道设计器如何找到第二种形式的 ch 函数。
但我想,如果当时我得到了你的建议,那是显而易见的。
如果sha256的设计者想像这样使用ch函数,那么sense.whenx为0,y为0,z为左,因为x和z是接异或门的,x and y connected with and gate.when x is one, y is y and z is nothing, 因为有两个z与异或门相连;
我应该从构建SHA256算法的人的角度开始猜测。
多谢指教!!
口技
如果您写出 x、y、z 和 2 个表达式的真值 table,您会发现它们 相同。
在这两种情况下(为简洁起见,我省略了中间结果):
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
选择y
或z
。当x
为0
时,选择z
,当x
为1
时,选择y
第二种形式少用了1个位运算;但我猜想任何速度的改进都是特定于实现的。