Go语言是否内置了一种执行常数时间字符串比较的方法?
当我需要在Ruby中实现此功能时,我使用了 Devise.secure_compare
方法。
Go语言是否内置了一种执行常数时间字符串比较的方法?
当我需要在Ruby中实现此功能时,我使用了 Devise.secure_compare
方法。
不适用于字符串,而是适用于[]byte
。请参阅crypto/subtle
,特别是ConstantTimeCompare
:
func ConstantTimeCompare(x, y []byte) int
如果两个等长的切片x和y包含相同的内容,则ConstantTimeCompare返回1。计算时间是切片长度的函数,与内容无关。
正如您可能知道的那样,您可以轻松地将字符串转换为字节切片:
var x []byte = []byte("someString")
subtle.ConstantTimeCompare
需要“两个等长的片段”,因此使用subtle.ConstantTimeEq
比较切片的长度也很重要,因为它在其他情况下具有一些“微妙”的行为。例如:http://play.golang.org/p/Xga-wsZvhT - Intermernet