Should create a strong password: ====== variable _index [pid]; proc password {length} { global _index; variable _set {shW4UMe832TpaSylIdfzxbrNki9A7Q5PmZ0XDuYVg1KEGwLcJtjRCF6OqovBHn}; variable _password {}; for {set _char 1} {$_char <= $length} {incr _char} { incr _index [lindex [time { while {$_index >= [string length $_set]} { incr _index -[string length $_set]; } # Only usefull to increase entropy for {set _count $_index} {$_count <= [string length $_set]+[string index [clock microseconds] end]} {incr _count} { # Nothing to do } set _password $_password[string index $_set $_index]; }] 0] } return $_password; } ====== Call ''password length'' inside the script. [AMG]: My first instinct was to optimize this code since it is written in a seemingly wasteful way. However, there is a trick, a method to the madness. The [time] command is used as a random number generator, used to advance the index into the character set. So inefficient programming with somewhat unpredictable runtime is exactly the programmer's intent. [bll] 2016-4-15: See [http://fourmilab.ch/random/]: The output from "ent" for 80000 characters, password 8 called 10000 times. The serial correlation coefficient is quite high. ====== Entropy = 4.787082 bits per byte. Optimum compression would reduce the size of this 80000 byte file by 40 percent. Chi square distribution for 80000 samples is 841393.86, and randomly would exceed this value 0.01 percent of the times. Arithmetic mean value of data bytes is 93.7709 (127.5 = random). Monte Carlo value for Pi is 4.000000000 (error 27.32 percent). Serial correlation coefficient is -0.204070 (totally uncorrelated = 0.0). ====== ---- [paskali] 2016-04-15: Thanks. I am crazy. ---- '''[paskali] - 2016-04-16 13:38:58''' Update, now the previous test should be something like this (on a pII 366Mhz): ====== Value Char Occurrences Fraction 48 0 1346 0.016825 49 1 1254 0.015675 50 2 1289 0.016112 51 3 1279 0.015988 52 4 1280 0.016000 53 5 1298 0.016225 54 6 1184 0.014800 55 7 1333 0.016663 56 8 1332 0.016650 57 9 1241 0.015513 65 A 1262 0.015775 66 B 1322 0.016525 67 C 1259 0.015738 68 D 1318 0.016475 69 E 1224 0.015300 70 F 1268 0.015850 71 G 1335 0.016688 72 H 1249 0.015612 73 I 1294 0.016175 74 J 1285 0.016063 75 K 1323 0.016538 76 L 1296 0.016200 77 M 1292 0.016150 78 N 1261 0.015762 79 O 1223 0.015288 80 P 1310 0.016375 81 Q 1289 0.016112 82 R 1300 0.016250 83 S 1252 0.015650 84 T 1337 0.016713 85 U 1320 0.016500 86 V 1293 0.016162 87 W 1303 0.016287 88 X 1312 0.016400 89 Y 1310 0.016375 90 Z 1290 0.016125 97 a 1360 0.017000 98 b 1326 0.016575 99 c 1253 0.015662 100 d 1302 0.016275 101 e 1244 0.015550 102 f 1307 0.016338 103 g 1330 0.016625 104 h 1267 0.015838 105 i 1349 0.016862 106 j 1290 0.016125 107 k 1290 0.016125 108 l 1215 0.015187 109 m 1288 0.016100 110 n 1273 0.015912 111 o 1272 0.015900 112 p 1308 0.016350 113 q 1363 0.017038 114 r 1269 0.015863 115 s 1281 0.016012 116 t 1339 0.016737 117 u 1281 0.016012 118 v 1257 0.015713 119 w 1276 0.015950 120 x 1295 0.016188 121 y 1280 0.016000 122 z 1322 0.016525 Total: 80000 1.000000 Entropy = 5.953637 bits per byte. Optimum compression would reduce the size of this 80000 byte file by 25 percent. Chi square distribution for 80000 samples is 250577.73, and randomly would exceed this value less than 0.01 percent of the times. Arithmetic mean value of data bytes is 86.9505 (127.5 = random). Monte Carlo value for Pi is 4.000000000 (error 27.32 percent). Serial correlation coefficient is 0.000214 (totally uncorrelated = 0.0). ====== ---- [bll] 2016-4-16 The latest version: See [http://fourmilab.ch/random/]: The output from "ent" for 80000 characters, password 8 called 10000 times. The serial correlation coefficient is very high. As seen from the character occurrence table, this is not a strong generator. ====== Entropy = 3.753542 bits per byte. Optimum compression would reduce the size of this 80000 byte file by 53 percent. Chi square distribution for 80000 samples is 1668541.12, and randomly would exceed this value 0.01 percent of the times. Arithmetic mean value of data bytes is 101.3792 (127.5 = random). Monte Carlo value for Pi is 4.000000000 (error 27.32 percent). Serial correlation coefficient is -0.048597 (totally uncorrelated = 0.0). ====== The character occurence table: ====== Value Char Occurrences Fraction 48 0 64 0.000800 49 1 31 0.000387 50 2 12 0.000150 51 3 17 0.000212 52 4 11 0.000138 53 5 122 0.001525 54 6 11 0.000138 55 7 183 0.002288 56 8 18 0.000225 57 9 1063 0.013288 65 A 277 0.003462 66 B 12 0.000150 67 C 17 0.000212 68 D 64 0.000800 69 E 25 0.000313 70 F 17 0.000212 71 G 15 0.000188 72 H 10 0.000125 73 I 6791 0.084888 74 J 13 0.000162 75 K 24 0.000300 76 L 17 0.000212 77 M 11 0.000138 78 N 7556 0.094450 79 O 14 0.000175 80 P 111 0.001388 81 Q 152 0.001900 82 R 7 0.000087 83 S 309 0.003863 84 T 17 0.000212 85 U 10 0.000125 86 V 41 0.000513 87 W 12 0.000150 88 X 62 0.000775 89 Y 52 0.000650 90 Z 98 0.001225 97 a 120 0.001500 98 b 7842 0.098025 99 c 13 0.000162 100 d 7534 0.094175 101 e 15 0.000188 102 f 7720 0.096500 103 g 21 0.000262 104 h 15 0.000188 105 i 3328 0.041600 106 j 21 0.000262 107 k 7020 0.087750 108 l 4747 0.059338 109 m 102 0.001275 110 n 8 0.000100 111 o 13 0.000162 112 p 15 0.000188 113 q 11 0.000138 114 r 7738 0.096725 115 s 15 0.000188 116 t 20 0.000250 117 u 46 0.000575 118 v 12 0.000150 119 w 19 0.000237 120 x 7718 0.096475 121 y 817 0.010212 122 z 7804 0.097550 Total: 80000 1.000000 ====== ** See Also ** * [mkpasswd] ---- '''[paskali] - 2016-04-16 16:43:09''' On the mine (AMD E-450 processor 1650Mhz): ====== Value Char Occurrences Fraction 48 0 1344 0.016800 49 1 1192 0.014900 50 2 1318 0.016475 51 3 1414 0.017675 52 4 1251 0.015637 53 5 1213 0.015163 54 6 1324 0.016550 55 7 1406 0.017575 56 8 1354 0.016925 57 9 1432 0.017900 65 A 1455 0.018187 66 B 1222 0.015275 67 C 1225 0.015313 68 D 1454 0.018175 69 E 1289 0.016112 70 F 1261 0.015762 71 G 1299 0.016237 72 H 1347 0.016837 73 I 1300 0.016250 74 J 1241 0.015513 75 K 1218 0.015225 76 L 1310 0.016375 77 M 1223 0.015288 78 N 1250 0.015625 79 O 1324 0.016550 80 P 1214 0.015175 81 Q 1284 0.016050 82 R 1144 0.014300 83 S 1132 0.014150 84 T 1333 0.016663 85 U 1211 0.015138 86 V 1226 0.015325 87 W 1399 0.017488 88 X 1396 0.017450 89 Y 1291 0.016137 90 Z 1205 0.015063 97 a 1287 0.016088 98 b 1252 0.015650 99 c 1312 0.016400 100 d 1367 0.017087 101 e 1244 0.015550 102 f 1508 0.018850 103 g 1149 0.014363 104 h 1345 0.016813 105 i 1344 0.016800 106 j 1250 0.015625 107 k 1206 0.015075 108 l 1270 0.015875 109 m 1211 0.015138 110 n 1306 0.016325 111 o 1241 0.015513 112 p 1279 0.015988 113 q 1309 0.016362 114 r 1200 0.015000 115 s 1361 0.017013 116 t 1194 0.014925 117 u 1410 0.017625 118 v 1166 0.014575 119 w 1385 0.017313 120 x 1321 0.016512 121 y 1176 0.014700 122 z 1406 0.017575 Total: 80000 1.000000 Entropy = 5.951122 bits per byte. Optimum compression would reduce the size of this 80000 byte file by 25 percent. Chi square distribution for 80000 samples is 251738.34, and randomly would exceed this value less than 0.01 percent of the times. Arithmetic mean value of data bytes is 86.7243 (127.5 = random). Monte Carlo value for Pi is 4.000000000 (error 27.32 percent). Serial correlation coefficient is -0.001069 (totally uncorrelated = 0.0). ====== ---- '''[paskali] - 2016-04-16 17:48:26''' On WM8880 dual core cortex A9 (someting like an ARM) ====== Value Char Occurrences Fraction 48 0 1298 0.016225 49 1 1326 0.016575 50 2 1338 0.016725 51 3 1311 0.016387 52 4 1278 0.015975 53 5 1231 0.015388 54 6 1307 0.016338 55 7 1271 0.015887 56 8 1274 0.015925 57 9 1343 0.016788 65 A 1293 0.016162 66 B 1298 0.016225 67 C 1311 0.016387 68 D 1260 0.015750 69 E 1258 0.015725 70 F 1294 0.016175 71 G 1296 0.016200 72 H 1292 0.016150 73 I 1288 0.016100 74 J 1360 0.017000 75 K 1289 0.016112 76 L 1293 0.016162 77 M 1307 0.016338 78 N 1312 0.016400 79 O 1346 0.016825 80 P 1280 0.016000 81 Q 1314 0.016425 82 R 1352 0.016900 83 S 1324 0.016550 84 T 1338 0.016725 85 U 1284 0.016050 86 V 1341 0.016762 87 W 1247 0.015588 88 X 1368 0.017100 89 Y 1342 0.016775 90 Z 1324 0.016550 97 a 1297 0.016213 98 b 1234 0.015425 99 c 1284 0.016050 100 d 1245 0.015562 101 e 1298 0.016225 102 f 1281 0.016012 103 g 1302 0.016275 104 h 1241 0.015513 105 i 1222 0.015275 106 j 1241 0.015513 107 k 1309 0.016362 108 l 1285 0.016063 109 m 1270 0.015875 110 n 1333 0.016663 111 o 1248 0.015600 112 p 1287 0.016088 113 q 1228 0.015350 114 r 1295 0.016188 115 s 1223 0.015288 116 t 1285 0.016063 117 u 1310 0.016375 118 v 1296 0.016200 119 w 1252 0.015650 120 x 1227 0.015338 121 y 1240 0.015500 122 z 1279 0.015988 Total: 80000 1.000000 Entropy = 5.953627 bits per byte. Optimum compression would reduce the size of this 80000 byte file by 25 percent. Chi square distribution for 80000 samples is 250583.02, and randomly would exceed this value less than 0.01 percent of the times. Arithmetic mean value of data bytes is 86.6740 (127.5 = random). Monte Carlo value for Pi is 4.000000000 (error 27.32 percent). Serial correlation coefficient is 0.003713 (totally uncorrelated = 0.0). ====== <> Security | Cryptography