Skip to content

Instantly share code, notes, and snippets.

@xen0bit
Created December 2, 2021 03:07
Show Gist options
  • Save xen0bit/ad55a79bef6bc17dcd0e770646ab3085 to your computer and use it in GitHub Desktop.
Save xen0bit/ad55a79bef6bc17dcd0e770646ab3085 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"fmt"
"math"
"math/rand"
)
func shannon(input []byte) (entropy float64) {
if len(input) == 0 {
return 0
} else {
for i := 0; i < 256; i++ {
s := make([]byte, 1)
s[0] = byte(i)
px := float64(bytes.Count(input, s)) / float64(len(input))
if px > 0 {
entropy += -px * math.Log2(px)
}
}
return entropy
}
}
func main() {
samples := 100000
for j := 1; j < 512; j++ {
maxForLength := float64(0)
for i := 1; i < samples; i++ {
r := make([]byte, j)
rand.Read(r)
maxForLength = math.Max(shannon(r), maxForLength)
}
fmt.Println("Length:", j, "Max Shannon For Length:", maxForLength)
}
}
// Length: 1 Max Shannon For Length: 0
// Length: 2 Max Shannon For Length: 1
// Length: 3 Max Shannon For Length: 1.584962500721156
// Length: 4 Max Shannon For Length: 2
// Length: 5 Max Shannon For Length: 2.321928094887362
// Length: 6 Max Shannon For Length: 2.584962500721156
// Length: 7 Max Shannon For Length: 2.807354922057604
// Length: 8 Max Shannon For Length: 3
// Length: 9 Max Shannon For Length: 3.169925001442312
// Length: 10 Max Shannon For Length: 3.321928094887362
// Length: 11 Max Shannon For Length: 3.459431618637298
// Length: 12 Max Shannon For Length: 3.584962500721156
// Length: 13 Max Shannon For Length: 3.7004397181410926
// Length: 14 Max Shannon For Length: 3.8073549220576055
// Length: 15 Max Shannon For Length: 3.906890595608518
// Length: 16 Max Shannon For Length: 4
// Length: 17 Max Shannon For Length: 4.08746284125034
// Length: 18 Max Shannon For Length: 4.169925001442312
// Length: 19 Max Shannon For Length: 4.247927513443583
// Length: 20 Max Shannon For Length: 4.321928094887363
// Length: 21 Max Shannon For Length: 4.39231742277876
// Length: 22 Max Shannon For Length: 4.459431618637295
// Length: 23 Max Shannon For Length: 4.523561956057013
// Length: 24 Max Shannon For Length: 4.584962500721156
// Length: 25 Max Shannon For Length: 4.643856189774723
// Length: 26 Max Shannon For Length: 4.70043971814109
// Length: 27 Max Shannon For Length: 4.754887502163471
// Length: 28 Max Shannon For Length: 4.807354922057602
// Length: 29 Max Shannon For Length: 4.857980995127571
// Length: 30 Max Shannon For Length: 4.906890595608519
// Length: 31 Max Shannon For Length: 4.954196310386877
// Length: 32 Max Shannon For Length: 5
// Length: 33 Max Shannon For Length: 5.044394119358456
// Length: 34 Max Shannon For Length: 5.087462841250338
// Length: 35 Max Shannon For Length: 5.129283016944964
// Length: 36 Max Shannon For Length: 5.1699250014423095
// Length: 37 Max Shannon For Length: 5.209453365628954
// Length: 38 Max Shannon For Length: 5.247927513443589
// Length: 39 Max Shannon For Length: 5.285402218862247
// Length: 40 Max Shannon For Length: 5.3219280948873635
// Length: 41 Max Shannon For Length: 5.357552004618081
// Length: 42 Max Shannon For Length: 5.3923174227787625
// Length: 43 Max Shannon For Length: 5.426264754702098
// Length: 44 Max Shannon For Length: 5.4594316186372955
// Length: 45 Max Shannon For Length: 5.491853096329673
// Length: 46 Max Shannon For Length: 5.5235619560570095
// Length: 47 Max Shannon For Length: 5.55458885167764
// Length: 48 Max Shannon For Length: 5.5849625007211605
// Length: 49 Max Shannon For Length: 5.614709844115208
// Length: 50 Max Shannon For Length: 5.643856189774728
// Length: 51 Max Shannon For Length: 5.6724253419715005
// Length: 52 Max Shannon For Length: 5.700439718141095
// Length: 53 Max Shannon For Length: 5.727920454563195
// Length: 54 Max Shannon For Length: 5.7548875021634665
// Length: 55 Max Shannon For Length: 5.7813597135246555
// Length: 56 Max Shannon For Length: 5.807354922057608
// Length: 57 Max Shannon For Length: 5.832890014164736
// Length: 58 Max Shannon For Length: 5.85798099512757
// Length: 59 Max Shannon For Length: 5.882643049361836
// Length: 60 Max Shannon For Length: 5.906890595608517
// Length: 61 Max Shannon For Length: 5.930737337562883
// Length: 62 Max Shannon For Length: 5.954196310386873
// Length: 63 Max Shannon For Length: 5.97727992349992
// Length: 64 Max Shannon For Length: 6
// Length: 65 Max Shannon For Length: 6.022367813028458
// Length: 66 Max Shannon For Length: 6.044394119358462
// Length: 67 Max Shannon For Length: 6.066089190457767
// Length: 68 Max Shannon For Length: 6.087462841250345
// Length: 69 Max Shannon For Length: 6.108524456778164
// Length: 70 Max Shannon For Length: 6.129283016944973
// Length: 71 Max Shannon For Length: 6.149747119504677
// Length: 72 Max Shannon For Length: 6.1699250014423175
// Length: 73 Max Shannon For Length: 6.189824558880028
// Length: 74 Max Shannon For Length: 6.182426338601928
// Length: 75 Max Shannon For Length: 6.202152023829225
// Length: 76 Max Shannon For Length: 6.247927513443591
// Length: 77 Max Shannon For Length: 6.240812514720878
// Length: 78 Max Shannon For Length: 6.259761193221231
// Length: 79 Max Shannon For Length: 6.278464292480902
// Length: 80 Max Shannon For Length: 6.271928094887357
// Length: 81 Max Shannon For Length: 6.315158644859923
// Length: 82 Max Shannon For Length: 6.308771516813209
// Length: 83 Max Shannon For Length: 6.3509430458047635
// Length: 84 Max Shannon For Length: 6.344698375159712
// Length: 85 Max Shannon For Length: 6.3623321126082955
// Length: 86 Max Shannon For Length: 6.379753126795122
// Length: 87 Max Shannon For Length: 6.396966484354469
// Length: 88 Max Shannon For Length: 6.391249800455488
// Length: 89 Max Shannon For Length: 6.408317700629331
// Length: 90 Max Shannon For Length: 6.425186429662996
// Length: 91 Max Shannon For Length: 6.441860574264635
// Length: 92 Max Shannon For Length: 6.458344564752679
// Length: 93 Max Shannon For Length: 6.474642682075777
// Length: 94 Max Shannon For Length: 6.469482468698902
// Length: 95 Max Shannon For Length: 6.485645082015158
// Length: 96 Max Shannon For Length: 6.5224625007211605
// Length: 97 Max Shannon For Length: 6.538057172084049
// Length: 98 Max Shannon For Length: 6.5534853543192995
// Length: 99 Max Shannon For Length: 6.548548539271538
// Length: 100 Max Shannon For Length: 6.583856189774739
// Length: 101 Max Shannon For Length: 6.559201581761682
// Length: 102 Max Shannon For Length: 6.59399396942248
// Length: 103 Max Shannon For Length: 6.589413148542458
// Length: 104 Max Shannon For Length: 6.585055102756485
// Length: 105 Max Shannon For Length: 6.599959803380399
// Length: 106 Max Shannon For Length: 6.633580831921675
// Length: 107 Max Shannon For Length: 6.648009042475905
// Length: 108 Max Shannon For Length: 6.643776391052348
// Length: 109 Max Shannon For Length: 6.639743957804441
// Length: 110 Max Shannon For Length: 6.6359051680701215
// Length: 111 Max Shannon For Length: 6.668289740223994
// Length: 112 Max Shannon For Length: 6.6756148550739915
// Length: 113 Max Shannon For Length: 6.678586042061222
// Length: 114 Max Shannon For Length: 6.703461176426475
// Length: 115 Max Shannon For Length: 6.70635961616178
// Length: 116 Max Shannon For Length: 6.7135423097640805
// Length: 117 Max Shannon For Length: 6.72716055289823
// Length: 118 Max Shannon For Length: 6.730100676480477
// Length: 119 Max Shannon For Length: 6.726750536417187
// Length: 120 Max Shannon For Length: 6.7568905956085334
// Length: 121 Max Shannon For Length: 6.770102906696089
// Length: 122 Max Shannon For Length: 6.783196353956342
// Length: 123 Max Shannon For Length: 6.7799128793229695
// Length: 124 Max Shannon For Length: 6.776776955548153
// Length: 125 Max Shannon For Length: 6.853784284662096
// Length: 126 Max Shannon For Length: 6.786803733023735
// Length: 127 Max Shannon For Length: 6.799708308819395
// Length: 128 Max Shannon For Length: 6.837852441389348
// Length: 129 Max Shannon For Length: 6.819328902693293
// Length: 130 Max Shannon For Length: 6.806983197643841
// Length: 131 Max Shannon For Length: 6.850216894667223
// Length: 132 Max Shannon For Length: 6.87200860797842
// Length: 133 Max Shannon For Length: 6.844756119711722
// Length: 134 Max Shannon For Length: 6.86079236206728
// Length: 135 Max Shannon For Length: 6.869408189643443
// Length: 136 Max Shannon For Length: 6.866874605956213
// Length: 137 Max Shannon For Length: 6.91733947345567
// Length: 138 Max Shannon For Length: 6.876640398807152
// Length: 139 Max Shannon For Length: 6.931890713011292
// Length: 140 Max Shannon For Length: 6.881033820500954
// Length: 141 Max Shannon For Length: 6.9107239587357245
// Length: 142 Max Shannon For Length: 6.899678281446046
// Length: 143 Max Shannon For Length: 6.916830165434596
// Length: 144 Max Shannon For Length: 6.928571616010637
// Length: 145 Max Shannon For Length: 6.935014089985111
// Length: 146 Max Shannon For Length: 6.943249216414265
// Length: 147 Max Shannon For Length: 6.954774385652684
// Length: 148 Max Shannon For Length: 6.9475960176413585
// Length: 149 Max Shannon For Length: 6.945645785548319
// Length: 150 Max Shannon For Length: 6.962152023829204
// Length: 151 Max Shannon For Length: 6.999994143298573
// Length: 152 Max Shannon For Length: 6.979803253560918
// Length: 153 Max Shannon For Length: 6.9648722381033314
// Length: 154 Max Shannon For Length: 6.997242547160326
// Length: 155 Max Shannon For Length: 6.995416179439883
// Length: 156 Max Shannon For Length: 7.011332427181728
// Length: 157 Max Shannon For Length: 7.022296624674024
// Length: 158 Max Shannon For Length: 7.010966428515783
// Length: 159 Max Shannon For Length: 7.03140567539651
// Length: 160 Max Shannon For Length: 7.029710047998843
// Length: 161 Max Shannon For Length: 7.065358570647751
// Length: 162 Max Shannon For Length: 7.051239586204586
// Length: 163 Max Shannon For Length: 7.025078537653401
// Length: 164 Max Shannon For Length: 7.035875861312226
// Length: 165 Max Shannon For Length: 7.05711282025397
// Length: 166 Max Shannon For Length: 7.0481438740789
// Length: 167 Max Shannon For Length: 7.06328647807687
// Length: 168 Max Shannon For Length: 7.054490711456377
// Length: 169 Max Shannon For Length: 7.072419229155986
// Length: 170 Max Shannon For Length: 7.087303362595544
// Length: 171 Max Shannon For Length: 7.06697532190344
// Length: 172 Max Shannon For Length: 7.087516716873644
// Length: 173 Max Shannon For Length: 7.081914065736993
// Length: 174 Max Shannon For Length: 7.0894390418008575
// Length: 175 Max Shannon For Length: 7.079670826068579
// Length: 176 Max Shannon For Length: 7.121307897021811
// Length: 177 Max Shannon For Length: 7.097493826894713
// Length: 178 Max Shannon For Length: 7.11893694217803
// Length: 179 Max Shannon For Length: 7.113622131976591
// Length: 180 Max Shannon For Length: 7.1390210129722895
// Length: 181 Max Shannon For Length: 7.1337427793125245
// Length: 182 Max Shannon For Length: 7.135407620908504
// Length: 183 Max Shannon For Length: 7.139990070512659
// Length: 184 Max Shannon For Length: 7.160763654414829
// Length: 185 Max Shannon For Length: 7.140761663183922
// Length: 186 Max Shannon For Length: 7.157333273427108
// Length: 187 Max Shannon For Length: 7.160452414398372
// Length: 188 Max Shannon For Length: 7.166186989929487
// Length: 189 Max Shannon For Length: 7.16271980515056
// Length: 190 Max Shannon For Length: 7.168462647770479
// Length: 191 Max Shannon For Length: 7.158580660496478
// Length: 192 Max Shannon For Length: 7.189129167387839
// Length: 193 Max Shannon For Length: 7.193392011316489
// Length: 194 Max Shannon For Length: 7.1861774684423185
// Length: 195 Max Shannon For Length: 7.182946275276996
// Length: 196 Max Shannon For Length: 7.192491030328654
// Length: 197 Max Shannon For Length: 7.204464700134065
// Length: 198 Max Shannon For Length: 7.208729284144531
// Length: 199 Max Shannon For Length: 7.2131841054356665
// Length: 200 Max Shannon For Length: 7.206307314753107
// Length: 201 Max Shannon For Length: 7.228068855314988
// Length: 202 Max Shannon For Length: 7.2249947748095575
// Length: 203 Max Shannon For Length: 7.236668183152398
// Length: 204 Max Shannon For Length: 7.229951506155368
// Length: 205 Max Shannon For Length: 7.2415560140868145
// Length: 206 Max Shannon For Length: 7.230000041662311
// Length: 207 Max Shannon For Length: 7.228440278724
// Length: 208 Max Shannon For Length: 7.2303703070313805
// Length: 209 Max Shannon For Length: 7.264635088956584
// Length: 210 Max Shannon For Length: 7.267700577138411
// Length: 211 Max Shannon For Length: 7.270769567813106
// Length: 212 Max Shannon For Length: 7.25497393330617
// Length: 213 Max Shannon For Length: 7.285064373696207
// Length: 214 Max Shannon For Length: 7.260067220005546
// Length: 215 Max Shannon For Length: 7.262009942552326
// Length: 216 Max Shannon For Length: 7.259426622493767
// Length: 217 Max Shannon For Length: 7.296023352220268
// Length: 218 Max Shannon For Length: 7.289906056398519
// Length: 219 Max Shannon For Length: 7.279219365477972
// Length: 220 Max Shannon For Length: 7.284613293001269
// Length: 221 Max Shannon For Length: 7.284354086472211
// Length: 222 Max Shannon For Length: 7.2819184000851624
// Length: 223 Max Shannon For Length: 7.290700628571347
// Length: 224 Max Shannon For Length: 7.3161089398374575
// Length: 225 Max Shannon For Length: 7.293694302289671
// Length: 226 Max Shannon For Length: 7.301222269870319
// Length: 227 Max Shannon For Length: 7.3132034431808615
// Length: 228 Max Shannon For Length: 7.297630803562538
// Length: 229 Max Shannon For Length: 7.32374920286853
// Length: 230 Max Shannon For Length: 7.308321029111181
// Length: 231 Max Shannon For Length: 7.314783240475309
// Length: 232 Max Shannon For Length: 7.329837352830225
// Length: 233 Max Shannon For Length: 7.3243816918181555
// Length: 234 Max Shannon For Length: 7.338188116963812
// Length: 235 Max Shannon For Length: 7.345478701801287
// Length: 236 Max Shannon For Length: 7.317879437009522
// Length: 237 Max Shannon For Length: 7.314738607475037
// Length: 238 Max Shannon For Length: 7.349547017464199
// Length: 239 Max Shannon For Length: 7.348401954351859
// Length: 240 Max Shannon For Length: 7.3441462205003685
// Length: 241 Max Shannon For Length: 7.347313558122917
// Length: 242 Max Shannon For Length: 7.3783922144668646
// Length: 243 Max Shannon For Length: 7.345413378011238
// Length: 244 Max Shannon For Length: 7.373200042409974
// Length: 245 Max Shannon For Length: 7.348723245054381
// Length: 246 Max Shannon For Length: 7.386441385341404
// Length: 247 Max Shannon For Length: 7.3630699642555895
// Length: 248 Max Shannon For Length: 7.395452661071203
// Length: 249 Max Shannon For Length: 7.36940494401201
// Length: 250 Max Shannon For Length: 7.3546083345842135
// Length: 251 Max Shannon For Length: 7.382644998061821
// Length: 252 Max Shannon For Length: 7.380440129873306
// Length: 253 Max Shannon For Length: 7.38995365367726
// Length: 254 Max Shannon For Length: 7.385698405291546
// Length: 255 Max Shannon For Length: 7.3731627388435435
// Length: 256 Max Shannon For Length: 7.373813427641414
// Length: 257 Max Shannon For Length: 7.381874500463165
// Length: 258 Max Shannon For Length: 7.388869018871726
// Length: 259 Max Shannon For Length: 7.390152833926704
// Length: 260 Max Shannon For Length: 7.39231574561259
// Length: 261 Max Shannon For Length: 7.395497375780751
// Length: 262 Max Shannon For Length: 7.435833593024914
// Length: 263 Max Shannon For Length: 7.411319559535811
// Length: 264 Max Shannon For Length: 7.423888295388285
// Length: 265 Max Shannon For Length: 7.410041473897199
// Length: 266 Max Shannon For Length: 7.4160376985940415
// Length: 267 Max Shannon For Length: 7.431806781881409
// Length: 268 Max Shannon For Length: 7.406410132549285
// Length: 269 Max Shannon For Length: 7.442991544616227
// Length: 270 Max Shannon For Length: 7.40902388399974
// Length: 271 Max Shannon For Length: 7.432558266382237
// Length: 272 Max Shannon For Length: 7.4453000085282905
// Length: 273 Max Shannon For Length: 7.432303798341826
// Length: 274 Max Shannon For Length: 7.441778296361511
// Length: 275 Max Shannon For Length: 7.451203035566737
// Length: 276 Max Shannon For Length: 7.425305525508992
// Length: 277 Max Shannon For Length: 7.430859438626555
// Length: 278 Max Shannon For Length: 7.436017916085252
// Length: 279 Max Shannon For Length: 7.448248820681198
// Length: 280 Max Shannon For Length: 7.444683586555502
// Length: 281 Max Shannon For Length: 7.447832181406375
// Length: 282 Max Shannon For Length: 7.453653558063473
// Length: 283 Max Shannon For Length: 7.451802412320858
// Length: 284 Max Shannon For Length: 7.4646470313698785
// Length: 285 Max Shannon For Length: 7.46431288968555
// Length: 286 Max Shannon For Length: 7.470855077946377
// Length: 287 Max Shannon For Length: 7.4692667159030455
// Length: 288 Max Shannon For Length: 7.469183551691875
// Length: 289 Max Shannon For Length: 7.47660894364903
// Length: 290 Max Shannon For Length: 7.47788158988066
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment