# ITSC202 Assignment 4
## Problem 1
**Result**

**prob1.c**
```c=
#include <stdio.h>
#include "prob1.h"
int main(void) {
char inputs[STR_COUNT][BUFFER_SIZE+1] = {""};
inputStr(inputs);
printf("Longest length is: %d\n", maxStrLen(inputs));
printf("Count of palindrome: %d", countPalindrome(inputs));
return 0;
}
int _strlen(char s[]) {
int i;
for (i = 0; s[i] != '\0'; i++);
return i;
}
int maxStrLen(char s[][BUFFER_SIZE+1]) {
int maxlen = 0;
for (int i = 0; i < STR_COUNT; i++) {
int len = _strlen(s[i]);
maxlen = len > maxlen ? len : maxlen;
}
return maxlen;
}
void inputStr(char s[][BUFFER_SIZE+1]) {
for (int i = 0; i < STR_COUNT; i++) {
printf("Input a string been enclosed by \"\" (%d/%d): ", i+1, STR_COUNT);
scanf("\"%" BUFSIZE(BUFFER_SIZE) "[^\"]s\"", s[i]);
while ('\n' != fgetc(stdin)); // Get rid of `"` and `\n` been in buffer
}
}
int isPalindrome(char s[]) {
if (0 == _strlen(s)) {
return 0;
}
int head, tail;
// I have no reverseStr()
for (head = 0, tail = _strlen(s) - 1 ; tail > head; head++, tail--) {
if (s[head] != s[tail]) {
return 0;
}
}
return 1;
}
int countPalindrome(char strings[][BUFFER_SIZE+1]) {
int ret_c = 0;
for (int i = 0; i < STR_COUNT; i++) {
ret_c += isPalindrome(strings[i]);
}
return ret_c;
}
```
**prob1.h**
```c=
#ifndef _PROB1_H
#define _PROB1_H
#define STR_COUNT 5
#define BUFFER_SIZE 30
#define _BUFSIZE(x) #x
#define BUFSIZE(x) _BUFSIZE(x)
int _strlen(char s[]);
int maxStrLen(char s[][BUFFER_SIZE+1]);
void inputStr(char s[][BUFFER_SIZE+1]);
int isPalindrome(char s[]);
int countPalindrome(char strings[][BUFFER_SIZE+1]);
#endif // prob1.h included
```
## Problem 2
**Result**

**prob2.c**
```c=
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "prob2.h"
int main(void) {
srand(time(NULL));
char valid_string[STRING_COUNT][STRING_SIZE] = {"\0"};
genStrings(valid_string);
printStrings(valid_string);
return 0;
}
char randPrintalbeChar(void) {
unsigned char rand_byte = rand();
return rand_byte % 0x5f + 0x20;
}
int _strlen(char s[]) {
int i;
for (i = 0; '\0' != s[i]; i++);
return i;
}
int convert(char s[]) {
int s_len = _strlen(s);
int security_code = 0;
for (int i = 0; i < s_len; i++) {
security_code += s[i] * (s_len - i);
}
return security_code;
}
void newRandomString(char s[], unsigned int s_len) {
int i;
for (i = 0; i < s_len; i++) {
s[i] = randPrintalbeChar();
}
s[i] = '\0';
}
void genStrings(char s[][STRING_SIZE]) {
unsigned int s_len;
while (1) {
printf("Enter the length of the security string: ");
scanf(" %u", &s_len);
if (12 <= s_len && s_len <= 20) break;
printf("\tValue entered should be between 12 and 20 inclusive!!! Try again\n");
}
int lower_limit = 0;
int upper_limit = 0;
for (int i = 1; i <= s_len; i++) {
lower_limit += 0x20 * i;
upper_limit += 0x7e * i;
}
unsigned int security_code;
printf("Enter your security code(%d ~ %d): ", lower_limit, upper_limit);
scanf(" %u", &security_code);
for (int i = 0; i < STRING_COUNT; i++) {
do {
newRandomString(s[i], s_len);
} while (security_code != convert(s[i]));
}
}
void printStrings(char s[][STRING_SIZE]) {
for (int i = 0; i < STRING_COUNT; i++) {
printf("Security String: %s -- Security Code: %d\n", s[i], convert(s[i]));
}
}
```
**prob2.h**
```c=
#ifndef _PROB2_H
#define _PROB2_H
#define STRING_SIZE 21
#define STRING_COUNT 10
char randPrintalbeChar(void);
int _strlen(char s[]);
int convert(char s[]);
void newRandomString(char s[], unsigned int s_len);
void genStrings(char s[][STRING_SIZE]);
void printStrings(char s[][STRING_SIZE]);
#endif // prob2.h included
```
**Question1**
After analyzing the algorithm used to generate the number; would you consider this a good algorithm?
**Answer**
No, we can easily find 10 and more passwords with the same security code. Means this algorithm has a pretty high collision rate. Which is not suitable for password check. Although it might somewhat ok for use as a checksum.
**Question2**
Perform some investigation online and state 3 characteristics of passwords that are considered secure.
**Answer**
From the online source at https://www.security.org/how-secure-is-my-password/
> A password should be 16 characters or more; our password-related research has found that 45 percent of Americans use passwords of eight characters or less, which are not as secure as longer passwords.
> A password should include a combination of letters, numbers, and characters.
> A password shouldn’t be shared with any other account.
> A password shouldn’t include any of the user’s personal information like their address or phone number. It’s also best not to include any information that can be accessed on social media like kids’ or pets’ names.
> A password shouldn’t contain any consecutive letters or numbers.
> A password shouldn’t be the word “password” or the same letter or number repeated.
## Bonus
Instead random generate password and try to match them on the list, I calculate every password on the list to get their security code.
**bonus.c**
```c=
#include <stdio.h>
#define TAGET 8124
int _strlen(char s[]) {
int i;
for (i = 0; '\0' != s[i]; i++);
return i;
}
int convert(char s[]) {
int s_len = _strlen(s);
int security_code = 0;
for (int i = 0; i < s_len; i++) {
security_code += s[i] * (s_len - i);
}
return security_code;
}
int main(void) {
FILE *file;
file = fopen("./rockyou_trimed.txt", "r");
if (NULL == file) return -1;
char next_line[22] = {"\0"}; // Prepare 2 more spaces for '\n' and '\0'
while (NULL != fgets(next_line, 20, file)) {
next_line[_strlen(next_line) - 1] = '\0'; // Get rid of the '\n' at the end of the string
if (TAGET == convert(next_line)) {
printf("%s\n", next_line);
}
}
return 0;
}
```
I used the sed command to trim down the original rockyou list.
```bash
sudo cat rockyou.txt | sed '/^.\{12,20\}$/!d' >> /mnt/share/ITSC202/A4/rockyou_trimed.txt
```
And here is the result of my program:
```=
michaelteamo
mibellagenio
anklebreaker
Playstation2
love2loveyou
daddylilgirl
cowgirl4life
andreiandrei
monkeyman123
ihatecameron
brendakarina
reggaereggae
migranamor10
menaragading
marciamarcia
eovrstrt2001
safadoelindo
pascualina25
ocalaflorida
nenagolosa69
neggagangzta
mandarambong
mahalkocmark
madeinbrazil
madaparazita
lagataminina
kanyewest123
jokacicibona
its918deny152
iqbalbengkok
ihatechelsea
gardencenter
fuckdarabbit
familiaisaza
ericssont630
delilahjones
coral_caro_s
cherrybaby97
cheriecherry
cheeseybeans
charmainejoy
capelliricci
animaeseeker
africancutie
aarongabriel
12gardenclose
yukitong2002
xeigx6eyfawn
x100prejunots
woodbarro501
whaingaroa13
westwood2008
weir261car531
weenatalie08
waterford123
wash839fad230
walnutbed660
wale352guy007
waanabeastar
vane2052036188
vane0511216839
tube251bop278
tsajuput8457
trey7gangsta
tortoise2239
toe182hurt722
todocambio00
tmjustme1990
tifabaricela
throwback317
thibodeaux21
thejastyn232
thechucker73
than469rib401
thacutie4eva
teamomiam,or
sxcfiteli123
supermom9705
stripper7261
steve101b2667
stePHANIE_PAO
spankette69!
soyunico2008
southern1989
soulmeyt2113
sonyvgn-n10e
sofysofy1234
soccerlife24
snakeshake12
smokealot555
smelly welly
slaughter666
skateboard24
skateboard16
skateboard08
singndance07
shivani4life
shin017cow101
shiaadhikari
sheyla1411$$$
sheila2741993
sexiigirl015
sewaandt4eva
seventeen223
sedam_emrem_
sectiembre21
secademivida
sebasserna12
seam717guy126
schlagsljs11
sazzybby123@
saramarisa17
sanctuary330
sanamabasamo
salami2891726
sagitario_29
rye_claire10
rudyomez6009
rpkntwes5523
roof092ana419
rodel_cute31
riverph0en1x
rick847mat358
richardson16
renacealamor
raft456jog940
rafaelastefh
rachelcarter
rabbitheavan
quad5009001000
punkbitch420
pulp4reality
promporn2929
princessj220
princes-nemo
postrero0722
poojariya123
poochunck666
penyuagar147
penkitten372
pekeninnah69
pathfinder56
pastonboi123
palapalapala
pagliarella5
orangedesk81
oanamaracine
nyminute3797
number1pinky
nochedecalor
nickeltree55
niaramadhani
naiarilalagi
nadiashannon
nabilazainal
naanavanilai
myladys0ph1a
mwthomps3441
mrscarney123
moodymare123
monty55892206
mollypup1990
mole606tic630
mo2yyad123321
miibabiwaren
michellemay1
michelleboba
michaelmarks
micaelasilva
mccutcheon72
mash619fry112
martinadan27
martec1234567
marqueses014
manalilidabu
malazajebana
majicfingers
majagatmitan
maiklamaikla
mahalkobente
mahalkitaedz
magicsword16
maggiecooper
magayunako09
maelovetan21
mady0720860114
madeesbonita
madamshamiya
maconqueen12
luckylady123
luciernaga24
lovedodead12
loveamie4eva
louisiana619
loserhole123
lookin4juice
loociie-xxxx
loganballin1
liberty4ever
liamcaldwell
leteshakat-9
leheneandrei
leahfaulkner
leahandpolly
laughter4eva
lapoderosa01
lakminisep19
ladyhough_01
lacramioaraa
lachuchichus
labrashiania
l6fkiy9oN2525
kristen emma
klasherock08
klapaucius11
klapaucius03
kitkatbf4lyf
kisses&sassy
kiraanddefer
kepahalatanu
kelciealexis
kawasakikx60
katherinne20
katanaidario
karatibros14
kamehamewave
kakilekakile
kailagrenger
kaesviharn34
josseline123
joanadacosta
jelenajelena
jeadoreleart
jay810swum781
javedalikhan
jannahilary1
janesammut1@
jamieatalona
jamesheadley
jamesbeckett
jakerichards
jakarakapooy
jajaconmocos
isaacricardo
ironpaper127
ipswich rock
intocables.7
indirinais24
indigenous06
inakiandmama
imissasya123
iluvjames123
ilscjedonn19
ilovezena123
ilovespam123
ilovereno123
ilovepink420
ilovepigs229
ilovej.quinn
iloveivan929
iloveemos913
ilovebity456
ilovearmy218
iloveali4eva
ilimaiakona1
icandoforall
husband?wife
httphttp4488
houseroad102
hottie/cutie
hollister312
hijodeadonai
hashaskachia
hannahughes1
hannahsadler
hannahdoheny
hambeautiful
halo_beyonce
hadassaester
guypearce089
grandmataco*
goshbeefham1
goldtruck969
gizmo/mowgli
girlygirl133
gird990gum588
ginadevalera
gigidalessio
gicagamutitu
giannakellie
georgebush69
georgeandme1
geneadunamis
gemmaisadick
gatita2588330
gabrielasoul
gaboneramona
g.o.d.d.e.s.s.
funkieme4eva
freaksquad07
fraangellico
fqymirw42fxl
fordfiesta08
foodeatter72
fisheraser22
fineliving35
fineladincom
fifastreet@3
fickleminded
febriganteng
featherlite*
fatimajeneba
farehasayang
familiacoqui
fajariansyah
fadLiye789456
fabioliveira
emmaandcorey
elsierhoda33
elmichoacano
elchicodesvr
eduardadrian
eastenders95
drew416san410
dragon4475732
dkhairdesign
diegoluver14
diegogiraldo
diditamaluca
diddlpimboli
dianaymaicol
dianalasuper
dianajolette
diamondbitch
dhiengmhieng
dessap1029394
demicaroline
decepsionada
deasisdeasis
deannasmells
davonschic90
danova3787803
danielpercil
daniellellou
dangthienbao
dangelsdevil
dandangstone
danassmebaby
damienevered
dakotadimick
cyberabancay
cristobal1_2
covington123
costaazul740
come063wry083
cmccolection
cleopatras69
clarinetto55
clarencejohn
cinemabizare
cincerechris
ciaracorkery
chuperson916
chuckandlala
chosenagain1
chikaodiumeh
chetsadakeng
chelsisababe
cheewahtlake
cheaperdozen
chazandchris
charsrojas21
charlottej29
chargingfone
chantoSinter
channysere07
cftnji1455451
celticchamps
cardenaskote
caramelbunny
caradepotito
canthandleme
camposlobo14
callatehueon
cakipankerot
cainedunford
c13bplacencio
burgers-dorp
brianandjeni
brendancraig
brandibbyboy
bootsie4life
book283moo556
bongbaw_nana
blueorange12
bloodedangel
blogmaster28
blackgonzalo
blackburnrfc
billiandkiki
bikerbradley
bigeyedbuddy
bicolbonding
bhattacharya
beuandsmile!
bettyboop515
bettyboop329
bestfriend42
bestest4ever
berrykiwi530
berryauto131
belitaibette
becauseilove
bebitogrande
batintinay17
basketcasegd
bankraknanna
banditmeisha
badlawyerkab
badboyshammy
b.h.u.r.a_3558
aviancabravo
attention107
ashleycole3*
arturo vidal
aristotle...
arbieandspot
appleberry11
apachekrissy
anushree luv
anntaleser03
animandarina
anggerjancok
angelychuy19
angelicuchis
angelemanuel
angeldiavolo
angelcurry83
angelawalker
anevabradley
andreiatefas
andreasafiro
andreanatera
andreacordon
anahwel_mika
anahiyadrian
amy397molt775
amudhaganesh
amielbucayan
americapekis
allaneemilly
alisonjane93
alinriri4lyf
alinashideea
alexoswii777
alejitapages
alejandrogro
aldariscraft
alanbermudez
aikoaikoaiko
ahoy802gum504
adriangolias
adanterhodes
adamlongoria
adakuangword
achtungbaby1
acanncypaula
abril25de1996
abigail020403
abelgonzales
abdryydany25
^^nicumsum^^
Xeruos3111990
TRANSFORMATION
TEQUIEROJAZMIN
TEADORO17400723
Snowbaording
Siriyaratana
Pereira251257
PSK4684295Hobit
Noquestion4H
NURULNATASHA30
MIOSITOHERMOSO
Losodiotanto
Keykotenshen
JNMuki-4568525
Iwanttolearn
ISAAC TE QUIERO
ILoveYou14344
ILOVEYOUELIANA
ILOVEJAZZREYES
FrancinE187!@
Arlette022202
A1B2C3D4E5F6G7H8
99592905240034308
97927009622338612
95869994mourad@
92Queenofpain
4r9001200yamaha
22rpb_rko.tom
2011584623humann
1993winnie1993
14759639874123456
10tumi?yote27
020592KARLAMEMO0
0061854lamorena
,6d;fu[6Pg0ibP
*kathryn*0523
**gi4n+ekelo**
***253091tatiana
#1rubberducky
!Dreadnaught1
```