| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package main
- import "math"
- // getShannonEntropy https://en.wiktionary.org/wiki/Shannon_entropy
- func getShannonEntropy(data string) (entropy float64) {
- if data == "" {
- return 0
- }
- charCounts := make(map[rune]int)
- for _, char := range data {
- charCounts[char]++
- }
- invLength := 1.0 / float64(len(data))
- for _, count := range charCounts {
- freq := float64(count) * invLength
- entropy -= freq * math.Log2(freq)
- }
- return entropy
- }
- func entropyIsHighEnough(entropy float64) bool {
- if entropy >= opts.Entropy && len(config.Entropy.entropyRanges) == 0 {
- return true
- }
- for _, eR := range config.Entropy.entropyRanges {
- if entropy > eR.v1 && entropy < eR.v2 {
- return true
- }
- }
- return false
- }
- func highEntropyLineIsALeak(line string) bool {
- if !opts.NoiseReduction {
- return true
- }
- for _, re := range config.Entropy.regexes {
- if re.FindString(line) != "" {
- return true
- }
- }
- return false
- }
|