password_entropy
Estimate a password's strength without ever echoing it: the character-pool bound (length x log2 of the pool), a pattern-adjusted estimate that charges common passwords (a bundled list of the 2000 most common, from SecLists), l33t substitutions, keyboard runs, sequences, repeats, dates and context words at their guessing cost, crack-time estimates at stated guess rates (online and offline) and NIST SP 800-63B advice. Findings give only the pattern type, position and length.
Install
/tools install password_entropy /tools install password_entropy@1.0.0
In a console session, or let the model find it in normal mode: axlr_catalog describes it and axlr_install_tool asks for the same install card. The card reads catalog axlr · password_entropy 1.0.0 · verified once the index signature, the manifest digest and every file digest check out. Then the model runs it with axlr_run_tool password_entropy; each run is approved as a local_exec.
Arguments
One JSON object on stdin, validated against the schema before the program starts.
| name | type | required | default | meaning |
|---|---|---|---|---|
password | string | yes | length ≥ 1; length ≤ 4096 | |
context | array of string | no | [] | User or service words to penalise (name, e-mail, site). items ≤ 50 |
guesses_per_second | object of number | no | {} | Extra attack rates {label: guesses per second} |
Input schema (JSON)
{
"type": "object",
"required": [
"password"
],
"additionalProperties": false,
"properties": {
"password": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"context": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 50,
"default": [],
"description": "User or service words to penalise (name, e-mail, site)"
},
"guesses_per_second": {
"type": "object",
"additionalProperties": {
"type": "number",
"exclusiveMinimum": 0
},
"default": {},
"description": "Extra attack rates {label: guesses per second}"
}
}
}
Example
Input
{
"password": "kxqbvtmzrwpj"
}
Output (stdout)
{
"length": 12,
"pool_size": 26,
"pool_entropy_bits": 56.41,
"estimated_entropy_bits": 56.41,
"rating": "fair",
"patterns": []
}
Files
The command the install card registers is python3 password_entropy.py, run in the workspace with PATH and HOME as its only environment. Each file's SHA-256 is in the signed index; the console checks them before showing the card and again before writing.
common_passwords.txt · sha256 4d03381115e4c2d591e5698bbd1941bec8a34fe2650f588c164f57d8bfe1fcee
# Most common passwords (rank<TAB>password, lower-cased), first 2000 of length >= 4.
# Source: SecLists Passwords/Common-Credentials/10k-most-common.txt, MIT License,
# https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10k-most-common.txt
# Fetched 2026-10-18 by tools/catalog/data/password_entropy.py
1 password
2 123456
3 12345678
4 1234
5 qwerty
6 12345
7 dragon
8 pussy
9 baseball
10 football
11 letmein
12 monkey
13 696969
14 abc123
15 mustang
16 michael
17 shadow
18 master
19 jennifer
20 111111
21 2000
22 jordan
23 superman
24 harley
25 1234567
26 fuckme
27 hunter
28 fuckyou
29 trustno1
30 ranger
31 buster
32 thomas
33 tigger
34 robert
35 soccer
36 fuck
37 batman
38 test
39 pass
40 killer
41 hockey
42 george
43 charlie
44 andrew
45 michelle
46 love
47 sunshine
48 jessica
49 asshole
50 6969
51 pepper
52 daniel
53 access
54 123456789
55 654321
56 joshua
57 maggie
58 starwars
59 silver
60 william
61 dallas
62 yankees
63 123123
64 ashley
65 666666
66 hello
67 amanda
68 orange
69 biteme
70 freedom
71 computer
72 sexy
73 thunder
74 nicole
75 ginger
76 heather
77 hammer
78 summer
79 corvette
80 taylor
81 fucker
82 austin
83 1111
84 merlin
85 matthew
86 121212
87 golfer
88 cheese
89 princess
90 martin
91 chelsea
92 patrick
93 richard
94 diamond
95 yellow
96 bigdog
97 secret
98 asdfgh
99 sparky
100 cowboy
101 camaro
102 anthony
103 matrix
104 falcon
105 iloveyou
106 bailey
107 guitar
108 jackson
109 purple
110 scooter
111 phoenix
112 aaaaaa
113 morgan
114 tigers
115 porsche
116 mickey
117 maverick
118 cookie
119 nascar
120 peanut
121 justin
122 131313
123 money
124 horny
125 samantha
126 panties
127 steelers
128 joseph
129 snoopy
130 boomer
131 whatever
132 iceman
133 smokey
134 gateway
135 dakota
136 cowboys
137 eagles
138 chicken
139 dick
140 black
141 zxcvbn
142 please
143 andrea
144 ferrari
145 knight
146 hardcore
147 melissa
148 compaq
149 coffee
150 booboo
151 bitch
152 johnny
153 bulldog
154 xxxxxx
155 welcome
156 james
157 player
158 ncc1701
159 wizard
160 scooby
161 charles
162 junior
163 internet
164 bigdick
165 mike
166 brandy
167 tennis
168 blowjob
169 banana
170 monster
171 spider
172 lakers
173 miller
174 rabbit
175 enter
176 mercedes
177 brandon
178 steven
179 fender
180 john
181 yamaha
182 diablo
183 chris
184 boston
185 tiger
186 marine
187 chicago
188 rangers
189 gandalf
190 winter
191 bigtits
192 barney
193 edward
194 raiders
195 porn
196 badboy
197 blowme
198 spanky
199 bigdaddy
200 johnson
201 chester
202 london
203 midnight
204 blue
205 fishing
206 000000
207 hannah
208 slayer
209 11111111
210 rachel
211 sexsex
212 redsox
213 thx1138
214 asdf
215 marlboro
216 panther
217 zxcvbnm
218 arsenal
219 oliver
220 qazwsx
221 mother
222 victoria
223 7777777
224 jasper
225 angel
226 david
227 winner
228 crystal
229 golden
230 butthead
231 viking
232 jack
233 iwantu
234 shannon
235 murphy
236 angels
237 prince
238 cameron
239 girls
240 madison
241 wilson
242 carlos
243 hooters
244 willie
245 startrek
246 captain
247 maddog
248 jasmine
249 butter
250 booger
251 angela
252 golf
253 lauren
254 rocket
255 tiffany
256 theman
257 dennis
258 liverpoo
259 flower
260 forever
261 green
262 jackie
263 muffin
264 turtle
265 sophie
266 danielle
267 redskins
268 toyota
269 jason
270 sierra
271 winston
272 debbie
273 giants
274 packers
275 newyork
276 jeremy
277 casper
278 bubba
279 112233
280 sandra
281 lovers
282 mountain
283 united
284 cooper
285 driver
286 tucker
287 helpme
288 fucking
289 pookie
290 lucky
291 maxwell
292 8675309
293 bear
294 suckit
295 gators
296 5150
297 222222
298 shithead
299 fuckoff
300 jaguar
301 monica
302 fred
303 happy
304 hotdog
305 tits
306 gemini
307 lover
308 xxxxxxxx
309 777777
310 canada
311 nathan
312 victor
313 florida
314 88888888
315 nicholas
316 rosebud
317 metallic
318 doctor
319 trouble
320 success
321 stupid
322 tomcat
323 warrior
324 peaches
325 apples
326 fish
327 qwertyui
328 magic
329 buddy
330 dolphins
331 rainbow
332 gunner
333 987654
334 freddy
335 alexis
336 braves
337 cock
338 2112
339 1212
340 cocacola
341 xavier
342 dolphin
343 testing
344 bond007
345 member
346 calvin
347 voodoo
348 7777
349 samson
350 alex
351 apollo
352 fire
353 tester
354 walter
355 beavis
356 voyager
357 peter
358 porno
359 bonnie
360 rush2112
361 beer
362 apple
363 scorpio
364 jonathan
365 skippy
366 sydney
367 scott
368 red123
369 power
370 gordon
371 travis
372 beaver
373 star
374 jackass
375 flyers
376 boobs
377 232323
378 zzzzzz
379 steve
380 rebecca
381 scorpion
382 doggie
383 legend
384 ou812
385 yankee
386 blazer
387 bill
388 runner
389 birdie
390 bitches
391 555555
392 parker
393 topgun
394 asdfasdf
395 heaven
396 viper
397 animal
398 2222
399 bigboy
400 4444
401 arthur
402 baby
403 private
404 godzilla
405 donald
406 williams
407 lifehack
408 phantom
409 dave
410 rock
411 august
412 sammy
413 cool
414 brian
415 platinum
416 jake
417 bronco
418 paul
419 mark
420 frank
421 heka6w2
422 copper
423 billy
424 cumshot
425 garfield
426 willow
427 cunt
428 little
429 carter
430 slut
431 albert
432 69696969
433 kitten
434 super
435 jordan23
436 eagle1
437 shelby
438 america
439 11111
440 jessie
441 house
442 free
443 123321
444 chevy
445 bullshit
446 white
447 broncos
448 horney
449 surfer
450 nissan
451 999999
452 saturn
453 airborne
454 elephant
455 marvin
456 shit
457 action
458 adidas
459 qwert
460 kevin
461 1313
462 explorer
463 walker
464 police
465 christin
466 december
467 benjamin
468 wolf
469 sweet
470 therock
471 king
472 online
473 dickhead
474 brooklyn
475 teresa
476 cricket
477 sharon
478 dexter
479 racing
480 penis
481 gregory
482 0000
483 teens
484 redwings
485 dreams
486 michigan
487 hentai
488 magnum
489 87654321
490 nothing
491 donkey
492 trinity
493 digital
494 333333
495 stella
496 cartman
497 guinness
498 123abc
499 speedy
500 buffalo
501 kitty
502 pimpin
503 eagle
504 einstein
505 kelly
506 nelson
507 nirvana
508 vampire
509 xxxx
510 playboy
511 louise
512 pumpkin
513 snowball
514 test123
515 girl
516 sucker
517 mexico
518 beatles
519 fantasy
520 ford
521 gibson
522 celtic
523 marcus
524 cherry
525 cassie
526 888888
527 natasha
528 sniper
529 chance
530 genesis
531 hotrod
532 reddog
533 alexande
534 college
535 jester
536 passw0rd
537 bigcock
538 smith
539 lasvegas
540 carmen
541 slipknot
542 3333
543 death
544 kimberly
545 1q2w3e
546 eclipse
547 1q2w3e4r
548 stanley
549 samuel
550 drummer
551 homer
552 montana
553 music
554 aaaa
555 spencer
556 jimmy
557 carolina
558 colorado
559 creative
560 hello1
561 rocky
562 goober
563 friday
564 bollocks
565 scotty
566 abcdef
567 bubbles
568 hawaii
569 fluffy
570 mine
571 stephen
572 horses
573 thumper
574 5555
575 pussies
576 darkness
577 asdfghjk
578 pamela
579 boobies
580 buddha
581 vanessa
582 sandman
583 naughty
584 douglas
585 honda
586 matt
587 azerty
588 6666
589 shorty
590 money1
591 beach
592 loveme
593 4321
594 simple
595 poohbear
596 444444
597 badass
598 destiny
599 sarah
600 denise
601 vikings
602 lizard
603 melanie
604 assman
605 sabrina
606 nintendo
607 water
608 good
609 howard
610 time
611 123qwe
612 november
613 xxxxx
614 october
615 leather
616 bastard
617 young
618 101010
619 extreme
620 hard
621 password1
622 vincent
623 pussy1
624 lacrosse
625 hotmail
626 spooky
627 amateur
628 alaska
629 badger
630 paradise
631 maryjane
632 poop
633 crazy
634 mozart
635 video
636 russell
637 vagina
638 spitfire
639 anderson
640 norman
641 eric
642 cherokee
643 cougar
644 barbara
645 long
646 420420
647 family
648 horse
649 enigma
650 allison
651 raider
652 brazil
653 blonde
654 jones
655 55555
656 dude
657 drowssap
658 jeff
659 school
660 marshall
661 lovely
662 1qaz2wsx
663 jeffrey
664 caroline
665 franklin
666 booty
667 molly
668 snickers
669 leslie
670 nipples
671 courtney
672 diesel
673 rocks
674 eminem
675 westside
676 suzuki
677 daddy
678 passion
679 hummer
680 ladies
681 zachary
682 frankie
683 elvis
684 reggie
685 alpha
686 suckme
687 simpson
688 patricia
689 147147
690 pirate
691 tommy
692 semperfi
693 jupiter
694 redrum
695 freeuser
696 wanker
697 stinky
698 ducati
699 paris
700 natalie
701 babygirl
702 bishop
703 windows
704 spirit
705 pantera
706 monday
707 patches
708 brutus
709 houston
710 smooth
711 penguin
712 marley
713 forest
714 cream
715 212121
716 flash
717 maximus
718 nipple
719 bobby
720 bradley
721 vision
722 pokemon
723 champion
724 fireman
725 indian
726 softball
727 picard
728 system
729 clinton
730 cobra
731 enjoy
732 lucky1
733 claire
734 claudia
735 boogie
736 timothy
737 marines
738 security
739 dirty
740 admin
741 wildcats
742 pimp
743 dancer
744 hardon
745 veronica
746 fucked
747 abcd1234
748 abcdefg
749 ironman
750 wolverin
751 remember
752 great
753 freepass
754 bigred
755 squirt
756 justice
757 francis
758 hobbes
759 kermit
760 pearljam
761 mercury
762 domino
763 9999
764 denver
765 brooke
766 rascal
767 hitman
768 mistress
769 simon
770 tony
771 bbbbbb
772 friend
773 peekaboo
774 naked
775 budlight
776 electric
777 sluts
778 stargate
779 saints
780 bondage
781 brittany
782 bigman
783 zombie
784 swimming
785 duke
786 qwerty1
787 babes
788 scotland
789 disney
790 rooster
791 brenda
792 mookie
793 swordfis
794 candy
795 duncan
796 olivia
797 hunting
798 blink182
799 alicia
800 8888
801 samsung
802 bubba1
803 whore
804 virginia
805 general
806 passport
807 aaaaaaaa
808 erotic
809 liberty
810 arizona
811 jesus
812 abcd
813 newport
814 skipper
815 rolltide
816 balls
817 happy1
818 galore
819 christ
820 weasel
821 242424
822 wombat
823 digger
824 classic
825 bulldogs
826 poopoo
827 accord
828 popcorn
829 turkey
830 jenny
831 amber
832 bunny
833 mouse
834 007007
835 titanic
836 liverpool
837 dreamer
838 everton
839 friends
840 chevelle
841 carrie
842 gabriel
843 psycho
844 nemesis
845 burton
846 pontiac
847 connor
848 eatme
849 lickme
850 roland
851 cumming
852 mitchell
853 ireland
854 lincoln
855 arnold
856 spiderma
857 patriots
858 goblue
859 devils
860 eugene
861 empire
862 asdfg
863 cardinal
864 brown
865 shaggy
866 froggy
867 qwer
868 kawasaki
869 kodiak
870 people
871 phpbb
872 light
873 54321
874 kramer
875 chopper
876 hooker
877 honey
878 whynot
879 lesbian
880 lisa
881 baxter
882 adam
883 snake
884 teen
885 ncc1701d
886 qqqqqq
887 airplane
888 britney
889 avalon
890 sandy
891 sugar
892 sublime
893 stewart
894 wildcat
895 raven
896 scarface
897 elizabet
898 123654
899 trucks
900 wolfpack
901 pervert
902 lawrence
903 raymond
904 redhead
905 american
906 alyssa
907 bambam
908 movie
909 woody
910 shaved
911 snowman
912 tiger1
913 chicks
914 raptor
915 1969
916 stingray
917 shooter
918 france
919 stars
920 madmax
921 kristen
922 sports
923 jerry
924 789456
925 garcia
926 simpsons
927 lights
928 ryan
929 looking
930 chronic
931 alison
932 hahaha
933 packard
934 hendrix
935 perfect
936 service
937 spring
938 srinivas
939 spike
940 katie
941 252525
942 oscar
943 brother
944 bigmac
945 suck
946 single
947 cannon
948 georgia
949 popeye
950 tattoo
951 texas
952 party
953 bullet
954 taurus
955 sailor
956 wolves
957 panthers
958 japan
959 strike
960 flowers
961 pussycat
962 chris1
963 loverboy
964 berlin
965 sticky
966 marina
967 tarheels
968 fisher
969 russia
970 connie
971 wolfgang
972 testtest
973 mature
974 bass
975 catch22
976 juice
977 michael1
978 nigger
979 159753
980 women
981 alpha1
982 trooper
983 hawkeye
984 head
985 freaky
986 dodgers
987 pakistan
988 machine
989 pyramid
990 vegeta
991 katana
992 moose
993 tinker
994 coyote
995 infinity
996 inside
997 pepsi
998 letmein1
999 bang
1000 control
1001 hercules
1002 morris
1003 james1
1004 tickle
1005 outlaw
1006 browns
1007 billybob
1008 pickle
1009 test1
1010 michele
1011 antonio
1012 sucks
1013 pavilion
1014 changeme
1015 caesar
1016 prelude
1017 tanner
1018 adrian
1019 darkside
1020 bowling
1021 wutang
1022 sunset
1023 robbie
1024 alabama
1025 danger
1026 zeppelin
1027 juan
1028 rusty
1029 pppppp
1030 nick
1031 2001
1032 ping
1033 darkstar
1034 madonna
1035 qwe123
1036 bigone
1037 casino
1038 cheryl
1039 charlie1
1040 mmmmmm
1041 integra
1042 wrangler
1043 apache
1044 tweety
1045 qwerty12
1046 bobafett
1047 simone
1048 none
1049 business
1050 sterling
1051 trevor
1052 transam
1053 dustin
1054 harvey
1055 england
1056 2323
1057 seattle
1058 ssssss
1059 rose
1060 harry
1061 openup
1062 pandora
1063 pussys
1064 trucker
1065 wallace
1066 indigo
1067 storm
1068 malibu
1069 weed
1070 review
1071 babydoll
1072 doggy
1073 dilbert
1074 pegasus
1075 joker
1076 catfish
1077 flipper
1078 valerie
1079 herman
1080 fuckit
1081 detroit
1082 kenneth
1083 cheyenne
1084 bruins
1085 stacey
1086 smoke
1087 joey
1088 seven
1089 marino
1090 fetish
1091 xfiles
1092 wonder
1093 stinger
1094 pizza
1095 babe
1096 pretty
1097 stealth
1098 manutd
1099 gracie
1100 gundam
1101 cessna
1102 longhorn
1103 presario
1104 mnbvcxz
1105 wicked
1106 mustang1
1107 victory
1108 21122112
1109 shelly
1110 awesome
1111 athena
1112 q1w2e3r4
1113 help
1114 holiday
1115 knicks
1116 street
1117 redneck
1118 12341234
1119 casey
1120 gizmo
1121 scully
1122 dragon1
1123 devildog
1124 triumph
1125 eddie
1126 bluebird
1127 shotgun
1128 peewee
1129 ronnie
1130 angel1
1131 daisy
1132 special
1133 metallica
1134 madman
1135 country
1136 impala
1137 lennon
1138 roscoe
1139 omega
1140 access14
1141 enterpri
1142 miranda
1143 search
1144 smitty
1145 blizzard
1146 unicorn
1147 tight
1148 rick
1149 ronald
1150 asdf1234
1151 harrison
1152 trigger
1153 truck
1154 danny
1155 home
1156 winnie
1157 beauty
1158 thailand
1159 1234567890
1160 cadillac
1161 castle
1162 tyler
1163 bobcat
1164 buddy1
1165 sunny
1166 stones
1167 asian
1168 freddie
1169 chuck
1170 butt
1171 loveyou
1172 norton
1173 hellfire
1174 hotsex
1175 indiana
1176 short
1177 panzer
1178 lonewolf
1179 trumpet
1180 colors
1181 blaster
1182 12121212
1183 fireball
1184 logan
1185 precious
1186 aaron
1187 elaine
1188 jungle
1189 atlanta
1190 gold
1191 corona
1192 curtis
1193 nikki
1194 polaris
1195 timber
1196 theone
1197 baller
1198 chipper
1199 orlando
1200 island
1201 skyline
1202 dragons
1203 dogs
1204 benson
1205 licker
1206 goldie
1207 engineer
1208 kong
1209 pencil
1210 basketba
1211 open
1212 hornet
1213 world
1214 linda
1215 barbie
1216 chan
1217 farmer
1218 valentin
1219 wetpussy
1220 indians
1221 larry
1222 redman
1223 foobar
1224 travel
1225 morpheus
1226 bernie
1227 target
1228 141414
1229 hotstuff
1230 photos
1231 laura
1232 savage
1233 holly
1234 rocky1
1235 fuck_inside
1236 dollar
1237 turbo
1238 design
1239 newton
1240 hottie
1241 moon
1242 202020
1243 blondes
1244 4128
1245 lestat
1246 avatar
1247 future
1248 goforit
1249 random
1250 abgrtyu
1251 jjjjjj
1252 cancer
1253 q1w2e3
1254 smiley
1255 goldberg
1256 express
1257 virgin
1258 zipper
1259 wrinkle1
1260 stone
1261 andy
1262 babylon
1263 dong
1264 powers
1265 consumer
1266 dudley
1267 monkey1
1268 serenity
1269 samurai
1270 99999999
1271 bigboobs
1272 skeeter
1273 lindsay
1274 joejoe
1275 master1
1276 aaaaa
1277 chocolat
1278 christia
1279 birthday
1280 stephani
1281 tang
1282 1234qwer
1283 alfred
1284 ball
1285 98765432
1286 maria
1287 sexual
1288 maxima
1289 77777777
1290 sampson
1291 buckeye
1292 highland
1293 kristin
1294 seminole
1295 reaper
1296 bassman
1297 nugget
1298 lucifer
1299 airforce
1300 nasty
1301 watson
1302 warlock
1303 2121
1304 philip
1305 always
1306 dodge
1307 chrissy
1308 burger
1309 bird
1310 snatch
1311 missy
1312 pink
1313 gang
1314 maddie
1315 holmes
1316 huskers
1317 piglet
1318 photo
1319 joanne
1320 hamilton
1321 dodger
1322 paladin
1323 christy
1324 chubby
1325 buckeyes
1326 hamlet
1327 abcdefgh
1328 bigfoot
1329 sunday
1330 manson
1331 goldfish
1332 garden
1333 deftones
1334 icecream
1335 blondie
1336 spartan
1337 julie
1338 harold
1339 charger
1340 brandi
1341 stormy
1342 sherry
1343 pleasure
1344 juventus
1345 rodney
1346 galaxy
1347 holland
1348 escort
1349 zxcvb
1350 planet
1351 jerome
1352 wesley
1353 blues
1354 song
1355 peace
1356 david1
1357 ncc1701e
1358 1966
1359 51505150
1360 cavalier
1361 gambit
1362 karen
1363 sidney
1364 ripper
1365 oicu812
1366 jamie
1367 sister
1368 marie
1369 martha
1370 nylons
1371 aardvark
1372 nadine
1373 minnie
1374 whiskey
1375 bing
1376 plastic
1377 anal
1378 babylon5
1379 chang
1380 savannah
1381 loser
1382 racecar
1383 insane
1384 yankees1
1385 mememe
1386 hansolo
1387 chiefs
1388 fredfred
1389 freak
1390 frog
1391 salmon
1392 concrete
1393 yvonne
1394 zxcv
1395 shamrock
1396 atlantis
1397 warren
1398 wordpass
1399 julian
1400 mariah
1401 rommel
1402 1010
1403 harris
1404 predator
1405 sylvia
1406 massive
1407 cats
1408 sammy1
1409 mister
1410 stud
1411 marathon
1412 rubber
1413 ding
1414 trunks
1415 desire
1416 montreal
1417 justme
1418 faster
1419 kathleen
1420 irish
1421 1999
1422 bertha
1423 jessica1
1424 alpine
1425 sammie
1426 diamonds
1427 tristan
1428 00000
1429 swinger
1430 shan
1431 stallion
1432 pitbull
1433 letmein2
1434 roberto
1435 ready
1436 april
1437 palmer
1438 ming
1439 shadow1
1440 audrey
1441 chong
1442 clitoris
1443 wang
1444 shirley
1445 fuckers
1446 jackoff
1447 bluesky
1448 sundance
1449 renegade
1450 hollywoo
1451 151515
1452 bernard
1453 wolfman
1454 soldier
1455 picture
1456 pierre
1457 ling
1458 goddess
1459 manager
1460 nikita
1461 sweety
1462 titans
1463 hang
1464 fang
1465 ficken
1466 niners
1467 bottom
1468 bubble
1469 hello123
1470 ibanez
1471 webster
1472 sweetpea
1473 stocking
1474 323232
1475 tornado
1476 lindsey
1477 content
1478 bruce
1479 buck
1480 aragorn
1481 griffin
1482 chen
1483 campbell
1484 trojan
1485 christop
1486 newman
1487 wayne
1488 tina
1489 rockstar
1490 father
1491 geronimo
1492 pascal
1493 crimson
1494 brooks
1495 hector
1496 penny
1497 anna
1498 google
1499 camera
1500 chandler
1501 fatcat
1502 lovelove
1503 cody
1504 cunts
1505 waters
1506 stimpy
1507 finger
1508 cindy
1509 wheels
1510 viper1
1511 latin
1512 robin
1513 greenday
1514 987654321
1515 creampie
1516 brendan
1517 hiphop
1518 willy
1519 snapper
1520 funtime
1521 duck
1522 trombone
1523 adult
1524 cotton
1525 cookies
1526 kaiser
1527 mulder
1528 westham
1529 latino
1530 jeep
1531 ravens
1532 aurora
1533 drizzt
1534 madness
1535 energy
1536 kinky
1537 314159
1538 sophia
1539 stefan
1540 slick
1541 rocker
1542 55555555
1543 freeman
1544 french
1545 mongoose
1546 speed
1547 dddddd
1548 hong
1549 henry
1550 hungry
1551 yang
1552 catdog
1553 cheng
1554 ghost
1555 gogogo
1556 randy
1557 tottenha
1558 curious
1559 butterfl
1560 mission
1561 january
1562 singer
1563 sherman
1564 shark
1565 techno
1566 lancer
1567 lalala
1568 autumn
1569 chichi
1570 orion
1571 trixie
1572 clifford
1573 delta
1574 bobbob
1575 bomber
1576 holden
1577 kang
1578 kiss
1579 1968
1580 spunky
1581 liquid
1582 mary
1583 beagle
1584 granny
1585 network
1586 bond
1587 kkkkkk
1588 millie
1589 1973
1590 biggie
1591 beetle
1592 teacher
1593 susan
1594 toronto
1595 anakin
1596 genius
1597 dream
1598 cocks
1599 dang
1600 bush
1601 karate
1602 snakes
1603 bangkok
1604 callie
1605 fuckyou2
1606 pacific
1607 daytona
1608 kelsey
1609 infantry
1610 skywalke
1611 foster
1612 felix
1613 sailing
1614 raistlin
1615 vanhalen
1616 huang
1617 herbert
1618 jacob
1619 blackie
1620 tarzan
1621 strider
1622 sherlock
1623 lang
1624 gong
1625 sang
1626 dietcoke
1627 ultimate
1628 tree
1629 shai
1630 sprite
1631 ting
1632 artist
1633 chai
1634 chao
1635 devil
1636 python
1637 ninja
1638 misty
1639 ytrewq
1640 sweetie
1641 superfly
1642 456789
1643 tian
1644 jing
1645 jesus1
1646 freedom1
1647 dian
1648 drpepper
1649 potter
1650 chou
1651 darren
1652 hobbit
1653 violet
1654 yong
1655 shen
1656 phillip
1657 maurice
1658 gloria
1659 nolimit
1660 mylove
1661 biscuit
1662 yahoo
1663 shasta
1664 sex4me
1665 smoker
1666 smile
1667 pebbles
1668 pics
1669 philly
1670 tong
1671 tintin
1672 lesbians
1673 marlin
1674 cactus
1675 frank1
1676 tttttt
1677 chun
1678 danni
1679 emerald
1680 showme
1681 pirates
1682 lian
1683 dogg
1684 colleen
1685 xiao
1686 xian
1687 tazman
1688 tanker
1689 patton
1690 toshiba
1691 richie
1692 alberto
1693 gotcha
1694 graham
1695 dillon
1696 rang
1697 emily
1698 keng
1699 jazz
1700 bigguy
1701 yuan
1702 woman
1703 tomtom
1704 marion
1705 greg
1706 chaos
1707 fossil
1708 flight
1709 racerx
1710 tuan
1711 creamy
1712 boss
1713 bobo
1714 musicman
1715 warcraft
1716 window
1717 blade
1718 shuang
1719 sheila
1720 shun
1721 lick
1722 jian
1723 microsoft
1724 rong
1725 allen
1726 feng
1727 getsome
1728 sally
1729 quality
1730 kennedy
1731 morrison
1732 1977
1733 beng
1734 wwwwww
1735 yoyoyo
1736 zhang
1737 seng
1738 teddy
1739 joanna
1740 andreas
1741 harder
1742 luke
1743 qazxsw
1744 qian
1745 cong
1746 chuan
1747 deng
1748 nang
1749 boeing
1750 keeper
1751 western
1752 isabelle
1753 1963
1754 subaru
1755 sheng
1756 thuglife
1757 teng
1758 jiong
1759 miao
1760 martina
1761 mang
1762 maniac
1763 pussie
1764 tracey
1765 a1b2c3
1766 clayton
1767 zhou
1768 zhuang
1769 xing
1770 stonecol
1771 snow
1772 spyder
1773 liang
1774 jiang
1775 memphis
1776 regina
1777 ceng
1778 magic1
1779 logitech
1780 chuang
1781 dark
1782 million
1783 blow
1784 sesame
1785 shao
1786 poison
1787 titty
1788 terry
1789 kuan
1790 kuai
1791 kyle
1792 mian
1793 guan
1794 hamster
1795 guai
1796 ferret
1797 florence
1798 geng
1799 duan
1800 pang
1801 maiden
1802 quan
1803 velvet
1804 nong
1805 neng
1806 nookie
1807 buttons
1808 bian
1809 bingo
1810 biao
1811 zhong
1812 zeng
1813 xiong
1814 zhun
1815 ying
1816 zong
1817 xuan
1818 zang
1819 0.0.000
1820 suan
1821 shei
1822 shui
1823 sharks
1824 shang
1825 shua
1826 small
1827 peng
1828 pian
1829 piao
1830 liao
1831 meng
1832 miami
1833 reng
1834 guang
1835 cang
1836 change
1837 ruan
1838 diao
1839 luan
1840 lucas
1841 qing
1842 chui
1843 chuo
1844 cuan
1845 nuan
1846 ning
1847 heng
1848 huan
1849 kansas
1850 muscle
1851 monroe
1852 weng
1853 whitney
1854 1passwor
1855 bluemoon
1856 zhui
1857 zhua
1858 xiang
1859 zheng
1860 zhen
1861 zhei
1862 zhao
1863 zhan
1864 yomama
1865 zhai
1866 zhuo
1867 zuan
1868 tarheel
1869 shou
1870 shuo
1871 tiao
1872 lady
1873 leonard
1874 leng
1875 kuang
1876 jiao
1877 13579
1878 basket
1879 qiao
1880 qiong
1881 qiang
1882 chuai
1883 nian
1884 niao
1885 niang
1886 huai
1887 22222222
1888 bianca
1889 zhuan
1890 zhuai
1891 shuan
1892 shuai
1893 stardust
1894 jumper
1895 margaret
1896 archie
1897 66666666
1898 66668888
1899 charlott
1900 forget
1901 qwertz
1902 bones
1903 history
1904 milton
1905 waterloo
1906 2002
1907 stuff
1908 11223344
1909 office
1910 oldman
1911 preston
1912 trains
1913 murray
1914 vertigo
1915 246810
1916 black1
1917 swallow
1918 smiles
1919 standard
1920 alexandr
1921 parrot
1922 luther
1923 user
1924 nicolas
1925 1976
1926 surfing
1927 pioneer
1928 pete
1929 masters
1930 apple1
1931 asdasd
1932 auburn
1933 hannibal
1934 frontier
1935 panama
1936 lucy
1937 buffy
1938 brianna
1939 welcome1
1940 vette
1941 blue22
1942 shemale
1943 111222
1944 baggins
1945 groovy
1946 global
1947 turner
1948 181818
1949 1979
1950 blades
1951 spanking
1952 life
1953 byteme
1954 lobster
1955 collins
1956 dawg
1957 hilton
1958 japanese
1959 1970
1960 1964
1961 2424
1962 polo
1963 markus
1964 coco
1965 deedee
1966 mikey
1967 1972
1968 171717
1969 1701
1970 strip
1971 jersey
1972 green1
1973 capital
1974 sasha
1975 sadie
1976 putter
1977 vader
1978 seven7
1979 lester
1980 marcel
1981 banshee
1982 grendel
1983 gilbert
1984 dicks
1985 dead
1986 hidden
1987 iloveu
1988 1980
1989 sound
1990 ledzep
1991 michel
1992 147258
1993 female
1994 bugger
1995 buffett
1996 bryan
1997 hell
1998 kristina
1999 molson
2000 2020
password_entropy.py · sha256 6de3894cb31bc33b7757e6ddace2dcf6a90486e60f2f2b6f486022167db8eced
#!/usr/bin/env python3
"""Estimate the entropy of a password given in the input: the character-pool bound
(length x log2(pool)) and a pattern-adjusted estimate that charges common passwords,
keyboard runs, sequences, repeats, dates, l33t substitutions and context words at their
real guessing cost; crack-time estimates at stated guess rates; and NIST SP 800-63B advice.
The password and every substring of it are NEVER written to the output: findings carry the
pattern type, its position and its length only.
Input (JSON on stdin):
password the password (string, at most 4096 characters)
context words specific to the user or the service (name, e-mail, site), optional
guesses_per_second extra guess rates to estimate, {label: rate}, optional
"""
import json
import math
import pathlib
import sys
import unicodedata
HERE = pathlib.Path(__file__).resolve().parent
KEYBOARD_ROWS = ["`1234567890-=", "qwertyuiop[]\\", "asdfghjkl;'", "zxcvbnm,./", "1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol0p",
"qazwsxedcrfvtgbyhnujmikolp", "azertyuiop", "qwertzuiop", "yxcvbnm"]
SEQUENCES = ["abcdefghijklmnopqrstuvwxyz", "0123456789"]
LEET = {"4": "a", "@": "a", "8": "b", "(": "c", "3": "e", "6": "g", "9": "g", "1": "i", "!": "i", "|": "l", "0": "o",
"5": "s", "$": "s", "7": "t", "+": "t", "2": "z", "%": "x"}
SCENARIOS = [
("online_throttled", 100 / 3600, "online attack against a rate-limited login (100 guesses per hour)"),
("online_unthrottled", 10, "online attack without rate limiting (10 guesses per second)"),
("offline_slow_hash", 1e4, "offline attack on a slow hash such as bcrypt, scrypt or Argon2 (10^4 per second)"),
("offline_fast_hash", 1e10, "offline attack on a fast unsalted hash on GPUs (10^10 per second)"),
]
def fail(message):
print(json.dumps({"error": message}))
sys.exit(2)
def load_common():
ranks = {}
try:
lines = (HERE / "common_passwords.txt").read_text(encoding="utf-8").splitlines()
except OSError:
return ranks, {}
source = {}
for line in lines:
if line.startswith("#"):
text = line.lstrip("# ").strip()
if text.startswith("Source:"):
source["source"] = text[len("Source:"):].strip().rstrip(",")
elif text.startswith("https://"):
source["url"] = text
elif text.startswith("Fetched"):
source["fetched"] = text.split()[1]
continue
rank, _, word = line.partition("\t")
if word and rank.isdigit():
ranks.setdefault(word, int(rank))
return ranks, source
def pool_of(chars):
classes = {"lowercase": 0, "uppercase": 0, "digits": 0, "symbols": 0, "space": 0, "other_unicode": 0}
for char in chars:
if "a" <= char <= "z":
classes["lowercase"] += 1
elif "A" <= char <= "Z":
classes["uppercase"] += 1
elif "0" <= char <= "9":
classes["digits"] += 1
elif char == " ":
classes["space"] += 1
elif ord(char) < 128 and char.isprintable():
classes["symbols"] += 1
else:
classes["other_unicode"] += 1
sizes = {"lowercase": 26, "uppercase": 26, "digits": 10, "symbols": 32, "space": 1, "other_unicode": 100}
pool = sum(sizes[name] for name, count in classes.items() if count)
return classes, pool
def unleet_variants(text):
"""The lower-cased text with l33t characters replaced; '1' is tried as both i and l."""
base = "".join(LEET.get(c, c) for c in text)
variants = {base}
if "1" in text:
variants.add("".join("l" if c == "1" else LEET.get(c, c) for c in text))
return variants
def matches(chars, common, context):
"""Candidate patterns: (start, end, kind, bits)."""
n = len(chars)
lower = "".join(chars).lower()
found = []
# Common passwords and context words, plain or with l33t substitutions, case changes cost one bit.
for i in range(n):
for j in range(i + 4, min(n, i + 32) + 1):
piece = lower[i:j]
original = "".join(chars[i:j])
case_bit = 1 if original != piece else 0
for word, leet in [(piece, False)] + [(v, True) for v in unleet_variants(piece) if v != piece]:
if word in common:
found.append((i, j, "common_password" if not leet else "common_password_l33t",
math.log2(common[word]) + case_bit + (1 if leet else 0) + 1))
if word in context:
found.append((i, j, "context_word" if not leet else "context_word_l33t",
math.log2(len(context) + 1) + case_bit + (1 if leet else 0) + 1))
# Keyboard runs and alphabetic or numeric sequences, forwards or backwards, 4 or more.
for kind, lines, starts in (("keyboard_run", KEYBOARD_ROWS, 47), ("sequence", SEQUENCES, 36)):
for line in lines:
for direction in (line, line[::-1]):
i = 0
while i < n:
j = i
while j < n and j - i < len(direction):
if j == i:
if lower[j] not in direction:
break
else:
position = direction.find(lower[j - 1])
if position < 0 or position + 1 >= len(direction) or direction[position + 1] != lower[j]:
break
j += 1
if j - i >= 4:
found.append((i, j, kind, math.log2(starts * 2) + math.log2(j - i)))
i = j
else:
i += 1
# Repeats: one character three or more times, or a block repeated.
i = 0
while i < n:
j = i
while j < n and chars[j] == chars[i]:
j += 1
if j - i >= 3:
found.append((i, j, "repeated_character", math.log2(pool_of(chars[i])[1] or 1) + math.log2(j - i)))
i = max(j, i + 1)
for size in range(2, n // 2 + 1):
for i in range(0, n - 2 * size + 1):
block = chars[i:i + size]
j = i + size
while j + size <= n and chars[j:j + size] == block:
j += size
if j - i >= 2 * size and len(set(block)) > 1:
found.append((i, j, "repeated_block", size * math.log2(pool_of(block)[1] or 1) + math.log2((j - i) // size)))
# Dates and years: 19xx or 20xx, with or without day and month, with or without separators.
digits = "".join(chars)
for i in range(n):
for length in (10, 8, 6, 4):
piece = digits[i:i + length]
if len(piece) != length:
continue
kind = date_kind(piece)
if kind:
found.append((i, i + length, kind, math.log2(200) if kind == "year" else math.log2(366 * (100 if length == 6 else 200)) + (2 if length == 10 else 0)))
return found
def date_kind(piece):
if len(piece) == 4 and piece.isdigit():
return "year" if 1900 <= int(piece) <= 2099 else None
stripped = piece
if len(piece) == 10 and piece[2] == piece[5] and piece[2] in "-/._" or len(piece) == 10 and piece[4] == piece[7] and piece[4] in "-/._":
stripped = piece.replace(piece[2] if piece[2] in "-/._" else piece[4], "")
if not stripped.isdigit():
return None
if len(stripped) == 8:
y1, m1, d1 = int(stripped[:4]), int(stripped[4:6]), int(stripped[6:])
y2, m2, d2 = int(stripped[4:]), int(stripped[2:4]), int(stripped[:2])
y3, m3, d3 = int(stripped[4:]), int(stripped[:2]), int(stripped[2:4])
if (1900 <= y1 <= 2099 and 1 <= m1 <= 12 and 1 <= d1 <= 31) or any(1900 <= y <= 2099 and 1 <= m <= 12 and 1 <= d <= 31 for y, m, d in ((y2, m2, d2), (y3, m3, d3))):
return "date"
if len(stripped) == 6 and len(piece) == 6:
a, b, c = int(piece[:2]), int(piece[2:4]), int(piece[4:])
if (1 <= b <= 12 and 1 <= a <= 31) or (1 <= a <= 12 and 1 <= b <= 31) or (1 <= b <= 12 and 1 <= c <= 31):
return "date_short"
return None
def choose(found, per_char):
"""Non-overlapping patterns that save the most bits, greedily."""
scored = sorted(((max(0.0, (end - start) * per_char - bits), start, end, kind, bits) for start, end, kind, bits in found),
key=lambda item: (-item[0], item[1]))
taken, used = [], set()
for saving, start, end, kind, bits in scored:
if saving <= 0 or any(k in used for k in range(start, end)):
continue
used.update(range(start, end))
taken.append({"type": kind, "start": start, "length": end - start, "bits": round(bits, 2), "saving_bits": round(saving, 2)})
return sorted(taken, key=lambda item: item["start"])
def duration(seconds):
if seconds < 1:
return "less than a second"
units = [("century", 100 * 365.25 * 86400), ("year", 365.25 * 86400), ("month", 30.44 * 86400), ("day", 86400),
("hour", 3600), ("minute", 60), ("second", 1)]
for name, size in units:
if seconds >= size:
value = seconds / size
if name == "century" and value >= 1e6:
return f"{value:.2e} centuries"
whole = int(value)
plural = "centuries" if name == "century" else name + "s"
return f"{whole} {name if whole == 1 else plural}"
return "less than a second"
def rating(bits):
for limit, label in ((28, "very weak"), (36, "weak"), (60, "fair"), (80, "strong")):
if bits < limit:
return label
return "very strong"
def main():
try:
request = json.load(sys.stdin)
except ValueError:
fail("stdin is not a JSON object")
if not isinstance(request, dict):
fail("stdin must be a JSON object")
unknown = sorted(set(request) - {"password", "context", "guesses_per_second"})
if unknown:
fail(f"unknown field: {unknown[0]}")
password = request.get("password")
if not isinstance(password, str):
fail("password is required (a string)")
if not password:
fail("password is empty")
if len(password) > 4096:
fail("password is longer than 4096 characters")
context = request.get("context", [])
if not isinstance(context, list) or not all(isinstance(word, str) for word in context):
fail("context must be a list of strings")
context_words = set()
for word in context:
for part in [word] + word.replace("@", " ").replace(".", " ").replace("_", " ").replace("-", " ").split():
if len(part.strip()) >= 4:
context_words.add(part.strip().lower())
rates = list(SCENARIOS)
extra = request.get("guesses_per_second", {})
if not isinstance(extra, dict):
fail("guesses_per_second must be an object {label: guesses per second}")
for label, rate in extra.items():
if isinstance(rate, bool) or not isinstance(rate, (int, float)) or not rate > 0 or len(label) > 64:
fail("each guesses_per_second value must be a positive number and each label at most 64 characters")
rates.append((label, float(rate), "given in the input"))
# SP 800-63B counts each Unicode code point as one character, after normalisation.
normalized = unicodedata.normalize("NFKC", password)
chars = list(normalized)
common, source = load_common()
classes, pool = pool_of(chars)
per_char = math.log2(pool)
pool_bits = len(chars) * per_char
scanned = chars[:256] # patterns are searched in the first 256 characters
patterns = choose(matches(scanned, common, context_words), per_char)
adjusted = max(pool_bits - sum(p["saving_bits"] for p in patterns), 0.0)
whole_common = normalized.lower() in common
if whole_common:
adjusted = min(adjusted, math.log2(common[normalized.lower()]) + 1)
estimate = adjusted
advice = []
if len(chars) < 8:
advice.append("Too short: SP 800-63B requires at least 8 characters, and 15 when the password is the only authentication factor (rev. 4).")
elif len(chars) < 15:
advice.append("SP 800-63B rev. 4 asks for at least 15 characters when the password is the only factor; 8 is the minimum with a second factor.")
if whole_common or any(p["type"].startswith("common_password") for p in patterns):
advice.append("Contains a common or previously breached password: SP 800-63B requires verifiers to reject passwords found in such blocklists.")
if any(p["type"] in ("repeated_character", "repeated_block", "sequence", "keyboard_run") for p in patterns):
advice.append("Contains repetitive or sequential characters (SP 800-63B lists these among the values to reject).")
if any(p["type"].startswith("context_word") for p in patterns):
advice.append("Contains a context-specific word (user name, service name): SP 800-63B lists these among the values to reject.")
if any(p["type"] in ("date", "date_short", "year") for p in patterns):
advice.append("Contains a date or year: dates are among the first things guessed.")
if any(p["type"].endswith("_l33t") for p in patterns):
advice.append("Character substitutions (a->@, o->0) add almost nothing: crackers try them by rule.")
if estimate < 60:
advice.append("Prefer a long passphrase of several random words, or a random password from a password manager.")
advice.append("SP 800-63B: no composition rules, no periodic changes without evidence of compromise, allow at least 64 characters and paste from password managers.")
crack = {}
for label, rate, description in rates:
try:
seconds = (2 ** estimate) / 2 / rate
except OverflowError:
seconds = float("inf")
crack[label] = {"guesses_per_second": float(f"{rate:.6g}"), "description": description,
"seconds": float(f"{seconds:.4g}") if math.isfinite(seconds) else None,
"display": duration(seconds) if math.isfinite(seconds) else "longer than the age of the universe"}
print(json.dumps({
"length": len(chars),
"normalized": normalized != password,
"character_classes": {name: count > 0 for name, count in classes.items()},
"pool_size": pool,
"bits_per_character": round(per_char, 4),
"pool_entropy_bits": round(pool_bits, 2),
"estimated_entropy_bits": round(estimate, 2),
"rating": rating(estimate),
"whole_password_is_common": whole_common,
"patterns": patterns,
"crack_time": crack,
"advice": advice,
"method": "pool bound = length x log2(pool); estimate replaces each detected pattern by its guessing cost (zxcvbn-style); crack time = 2^(bits-1) / rate (average case)",
"blocklist": dict({"entries": len(common)}, **(source or {})),
"note": "The password is not echoed: patterns report only their type, position and length.",
}))
if __name__ == "__main__":
main()
Where it is served
The registry serves only AXLR clients, so a browser gets 403; fetch with a User-Agent that starts with axlr:
curl -A axlr-docs/1.0 -O https://registry.underpassai.com/tools/password_entropy/1.0.0/manifest.json
curl -A axlr-docs/1.0 -O https://registry.underpassai.com/tools/password_entropy/1.0.0/common_passwords.txt
curl -A axlr-docs/1.0 -O https://registry.underpassai.com/tools/password_entropy/1.0.0/password_entropy.py