#include #include #include #include int main() { int chars[256]; int c=0; // each character typecasted from ascii to int int i, j; // for loop control int k=0; // number of different characters, each 'A' counts once. int k1=0; // total passphrase characters, // initialization for (i = 0; i < 256; i++) chars[i] = 0; //char[i]= 0,0,0,0,0,, 0 //i 0,1,2,3,4,,,255 // only 32 - 126 is used // from blank to ~ // read entire file // every character is counted. while ((c = getchar()) != EOF) { if (isprint(c)) ++chars[c]; //char[c]= 0,0,0,0,0,, 1,, 0 //c 0,1,2,3,4,,65,,255 if (isprint(c)) // total passphrase characters, ++k1; // this one turns out to be 20 } // printf("===>DEBUG<==== %ld \n", k1); // ASCII printable ranges from 32 is space to 126 is ~ for (i = 32; i < 127; ++i) { if (chars[i] == 0) continue; // print once the ASCII number of the found char // if isblank print "spacebar" and frequency else printf("%c: ", i); // and print the frequency for (j = 0; j < chars[i]; ++j) { printf("#"); } // then print a new line printf("\n"); // and count the number of lines if ( chars[i] != 0) k++; } printf("the passphrase has %ld ASCII characters \n", k1); printf("the passphrase has %ld different ASCII characters \n", k); printf("hence Glyph entropy is log 2 (%ld) = %4.12lf bits per Glyph \n", k, log2(k)); printf("hence passPhrase entropy is %ld * log 2 (%ld) = %4.12lf Shannon \n", k1 , k , k1*log2(k)); return 0; } /* cc CharFrequencyHistogram.exe.c -lsunmath bash-3.00$ ./a.out < input.txt : # A: # ~: # the passphrase has 3 different ASCII characters hence entropy 1.584963 different ASCII characters */ /* bash-3.00$ ./a.out < input.txt a: ######################################################################### c: ### d: # e: # f: # l: ## m: # n: # o: # r: # s: # t: # y: ### the passphrase has 13 different ASCII characters hence string entropy is 3.700440 */ /* bash-3.00$ ./a.out < input.txt a: ## c: ### d: # e: # f: # l: ## m: # n: # o: # r: # s: # t: # y: ### the passphrase has 13 different ASCII characters hence string entropy is 3.700440 bash-3.00$ cat input.txt cleftcamsynodlacyyr !"#$%&'()*+,-./ */ /* !"#$%&'()*+,-./ 0123456789:;<=>? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{|}~ */ /* bash-3.00$ cc CharFrequencyHistogram_00.c -lsunmath bash-3.00$ ./a.out < input.txt : # !: # ": # #: # $: # %: # &: # ': # (: # ): # *: # +: # ,: # -: # .: # /: # 0: # 1: # 2: # 3: # 4: # 5: # 6: # 7: # 8: # 9: # :: # ;: # <: # =: # >: # ?: # @: # A: # B: # C: # D: # E: # F: # G: # H: # I: # J: # K: # L: # M: # N: # O: # P: # Q: # R: # S: # T: # U: # V: # W: # X: # Y: # Z: # [: # \: # ^: # _: # `: # a: # b: # c: # d: # e: # f: # g: # h: # i: # j: # k: # l: # m: # n: # o: # p: # q: # r: # s: # t: # u: # v: # w: # x: # y: # z: # {: # |: # }: # ~: # the passphrase has 94 ASCII characters the passphrase has 94 different ASCII characters hence Glyph entropy is log 2 (94) = 6.554588851678 bits per Glyph hence passPhrase entropy is 94 * log 2 (94) = 616.131352057698 Shannon bash-3.00$ */