回答
不适用于字符串,但适用于[]byte
。见crypto/subtle
,尤其ConstantTimeCompare
:
func ConstantTimeCompare(x, y []byte) int
ConstantTimeCompare返回1当且仅当两个相等长度的切片,x和y,具有相等的内容。所花费的时间是切片长度的函数,并且与内容无关。
正如你可能知道,你可以将字符串很容易转换为字节片:
var x []byte = []byte("someString")
使用'subtle.ConstantTimeEq'来比较切片的长度也很重要,因为'subtle.ConstantTimeCompare'需要“两个等长的切片”。它有一些“微妙”的行为,否则。示例:http://play.golang.org/p/Xga-wsZvhT – Intermernet
在上面的[示例](http://play.golang.org/p/Xga-wsZvhT)中,行为似乎是正确的。不等长的切片不相等。 – stevvooe
- 1. 定时安全地比较字符串
- 2. 在Go中比较字符串
- 3. Go如何做字符串比较?
- 4. 全局字符串比较
- 5. 字符串比较 - 安卓
- 6. 是在PHP字符串比较中的二进制安全的===?
- 7. 在Go中比较不等长字符串
- 8. 字符串比较C# - 全字匹配
- 9. 如何比较go模板中的字符串?
- 10. 字符/字符串比较
- 11. 字符串字符比较
- 12. 比较字符串
- 13. 比较字符串
- 14. 比较字符串
- 15. 字符串比较
- 16. 比较字符串
- 17. 字符串比较
- 18. 字符串比较
- 19. 字符串比较?
- 20. 字符串比较
- 21. 字符串比较
- 22. 字符串比较
- 23. 比较字符串
- 24. 比较字符串
- 25. 字符串比较
- 26. 字符串比较
- 27. 字符串比较
- 28. 字符串比较
- 29. 字符串比较
- 30. 字符串比较
secure_compare不是一个常数时间的方法,它调用each_byte,它遍历每个字节的字符串中 http://apidock.com/ruby/String/each_byte –
“恒定时间”和“安全”是非常不同的目标;请澄清你到底想要什么 – Vitruvius
@SethHoenig它是在定时攻击的情况下。常量时间比较与时间复杂度无关,仅意味着比较函数在发现差异时不会早期返回(这会泄漏多少输入不同的信息)。比较函数仅取决于输入的长度,而不取决于内容。 – nemo