entropy.go 452 B

12345678910111213141516171819202122232425
  1. package gitleaks
  2. import (
  3. "math"
  4. )
  5. // getShannonEntropy https://en.wiktionary.org/wiki/Shannon_entropy
  6. func getShannonEntropy(data string) (entropy float64) {
  7. if data == "" {
  8. return 0
  9. }
  10. charCounts := make(map[rune]int)
  11. for _, char := range data {
  12. charCounts[char]++
  13. }
  14. invLength := 1.0 / float64(len(data))
  15. for _, count := range charCounts {
  16. freq := float64(count) * invLength
  17. entropy -= freq * math.Log2(freq)
  18. }
  19. return entropy
  20. }