go 标准库中的ConstantTimeByteEq函数求教

justintung 发布于 2013/08/23 22:59
阅读 551
收藏 0
Go

ConstantTimeByteEq 位于  http://golang.org/pkg/crypto/subtle/#ConstantTimeByteEq


func ConstantTimeByteEq(x, y uint8) int {
    z := ^(x ^ y)
    z &= z >> 4
    z &= z >> 2
    z &= z >> 1

    return int(z)
}

函数功能是比较uin8类型的x和y是否相等,1相等,0不等

我要问的问题是: 通过异或

z := ^(x ^ y)
不就已经能判断x,y是否相等了吗?为什么还要加上底下的位运算?
z &= z >> 4
z &= z >> 2
z &= z >> 1

查了一下,发现

http://stackoverflow.com/questions/17603487/how-does-constanttimebyteeq-work

http://stackoverflow.com/questions/18366158/why-do-we-need-a-constant-time-single-byte-comparison-function
中解释了原因,不知国内程序员有何见解?

加载中
返回顶部
顶部