#include #include char* cypheredText[] = { "yjcv ku vjg pcog qh vjg uauvgo wugf da jco qrgtcvqtu vq ocmg htgg rjqpg ecnnu ?", "wbth lal voe htat oy voe wxbirtn vfzbqt wagye C poh aeovsn vojgav ?", "Nyrk grjjnfiu uzu Z xzmv kf jvklg re rttflek fe Kyv Rib ?", "Flle ujw esc wexp mo xsp kjr hsm hiwwcm, \"Wplpll stq lec qma e wzerg mzkk!\" ?", "Bmfy ytbs ini N mnij tzy ns zsynq ymj Ozajsnqj Htzwy qtxy ozwnxinhynts tajw rj ?", "Kyoo olxi rzr Niyovo Cohjpcx ojy dn T apopsy ?", "Kvoh wg hvs boas ct hvs Doqwtwq Pszz sadzcmss kvc fsor hvs wbhsfboz asac opcih am voqywbu oqhwjwhwsq cjsf hvs voa forwc ?" , "Iwh xwqv wpvpj fwr Vfvyj qks wf nzc ncgsoo esg psd gwc ntoqujvr ejs rypz nzfs ?", "Hsle td esp epcx qzc dzqehlcp mfcypo zy esp nsta esle Yzglepw dpye xp ?", "Bprf cup esanqneu xmm gtknv amme U biiwy krxheu Iwqt Taied ?", "Lwpi idlc sxs bn upiwtg axkt xc lwtc X bdkts xc lxiw wxb ?", "Yhlt xak tzg iytfrfad RanBfld squtpm uhst uquwd ce mswf tz wjrwtsr a wioe lhsv Ecid mwnlkoyee bmt oquwdo't ledn mp acomt ?", "Zkdw lv wkh qdph ri wkh SL ilup wkdw zdv zluhwdsshg eb Sdflilf Ehoo ?", "Plpki ytw eai rtc aaspx M llogw qj wef ms rh xq ?", /*15*/ "Ituot oaybmzk ymwqe ftq pqhuoq ftmf Xqiue geqp fa buow gb mzk dmpua eusmxe zqmd Qduo ?", "Kwth qzrva rbq lcq rxw Svtg vxcz zm vzs lbfieerl nsem rmh dg ac oef'l cwamu ?", "Epib qa bpm vium wn bpm ixizbumvb kwuxtmf epmzm Q bziksml lwev Mzqk Pmqvh ?", /*18*/ "Khkp wg wve kyfcqmm yb hvh TBS oeidr trwh Yhb MmCiwus Wko ogvwgxar hr ?", "Rcvo dn ivhz ja ocz omvinvxodji oj adiy v kzmnji'n njxdvg nzxpmdot iphwzm pndib oczdm ivhz viy yvoz ja wdmoc ?", /*20*/ "Wspa wdw gae ypte rj gae dilan lbnsp loeui V tndllrhh gae awvnh \"HZO, hzl jaq M uxla nvu\"", //"4A 75 6E 67 20 6A 6E 66 20 62 68 65 20 61 76 70 78 61 6E 7A 72 20 74 76 69 72 61 20 67 62 20 47 72 65 65 6C 20 55 6E 65 71 6C 3F ", //The above string is just Hexadecimal for character encoding, it translates to the following "Jung jnf bhe avpxanzr tvira gb Greel Uneql ?", "Gsig cof dsm fkqeoe vnss jo farj tbb epr Csyvd Nnxub mzlr ut grp lne ?", "Fqjc nunlcaxwrl mnerln mrm cqn OKR rwcnwcrxwjuuh kanjt fqnw cqnh bnjalqnm vh jyjacvnwc rw Ljujkjbjb ?", /*24*/ "Xvof jq qis bmns lg hvq thlss ktffb J cifsok EAJ uojbthwsbhlsg ?", "Cngz zuct ngy znk grsg sgzkx lux znk xkgr Kxoi Ckoyy ?", "Aslx jst rlxi bx ns wgzzcmgw UP jnsh hlrjf nyk TT seq s cojorpdw pssx gxmyeie ao bzy glc ?", /*27*/ //"85 102 121 114 32 103 113 32 114 102 99 32 108 121 107 99 32 109 100 32 114 102 99 32 122 109 105 113 114 109 112 99 32 71 32 100 112 99 111 115 99 108 114 99 98 32 103 108 32 66 99 108 116 99 112 63", "Ufyr gq rfc lykc md rfc zmiqrmpc G dpcosclrcb gl Bcltcp ?", "Phtm zvvvkci sw mhx Fmtvr VOX Ycmrt Emki vqimgv vowx hzh L cgf Ecbst ysi ?", "126 147 172 163 040 166 172 162 040 154 170 040 157 172 162 162 166 156 161 143 040 145 156 161 040 163 147 144 040 115 156 165 144 153 153 040 163 144 161 154 150 155 172 153 040 162 144 161 165 144 161 040 150 155 040 122 172 155 040 111 156 162 144 077", "Ouop lqeg gs zkds ulv V deds zq lus DS urqstsn't wwiaps ?", "Alex B25 rixasvo hmh M ywi xs xli HQZ qemrjveqi ?", "Caem alw Ymek Xptq'd tnwlchvw xz lrv lkkzxv ?", /*33*/ "Ozg ojglw lzw hshwj gf AH Khggxafy lzsl BKR skcww ew stgml ?", "Nvbx nte hyv bqgs pj gaabv jmjmwdi whd hyv UVT'g Giuxdoc Gctcwd Hvyqbuvz hycoij ?", "2B 2T W 2X 2Z 26 36 2P 36 2V 3C W 3A 32 39 38 2Z W 3D 33 31 38 2V 36 3D W 2R 2Z W 3E 3C 2V 2X 2Z 2Y W 3E 39 W 2R 32 2V 2E W 2V 3A 2V 3C 3E 37 2X 38 3E W 2X 39 37 3A 36 2Z 2S 1R", "Lsar JSA cryoi ergiu lq wipz tnrs dq dccfunaqi zf oj wqpctkiel dpzpgp I jstcgo cu dy hgq ?", /*37*/ "V2hhdCBGQkkgYWdlbnQgYXNrZWQgU3VuIE1pY3Jvc3lzdGVtcyB0byBjbGFpbSB0aGV51Gxvc3QgODAgbWlsbGlvbiBkb2xsYXJzPw==", /*38*/ "100-1111-10-0 011-000-1-111 00-0100 1101-10-1110-000-101-11-0-1 \ 0111-110-00-1001-1-101 111-0-11-0101-010-1-101 111-10-0100 11-00-11", }; char alphabet[] = { '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' }; char* keyWords[] = {" what "," is "," the "," of "," by "," to ", " did", " in ", " when ", " how "}; int attempROT(int rot, int cypheredIndex) { char tmpString[1024]; int i; char currentChar ; for(i=0 ; i < strlen(cypheredText[cypheredIndex]) ; i++) { currentChar = cypheredText[cypheredIndex][i] ; //Convert to lowercase if (currentChar >= 65 && currentChar <= 90) currentChar = currentChar+32; if (currentChar >= 97 && currentChar <= 122) { tmpString[i] = alphabet[ (currentChar + rot) % 26 ] ; } else tmpString[i] = cypheredText[cypheredIndex][i]; } tmpString[i] = '\0'; //Rotation done, seach for keywords. for(i= 0 ; i < sizeof(keyWords)/sizeof(char*); i++) { if (strstr(tmpString,keyWords[i])) { printf("[%d]: Candidate (ROT%d): %s\n",cypheredIndex+1,rot,tmpString); //printf("Found %s at %d\n",keyWords[i],); return 1; } } return 0; } int main(int argc, char** argv) { int i,j; int numTexts = sizeof(cypheredText) / sizeof(char*); int found; for(j=0 ; j < numTexts; j++) { //printf("%s\n",cypheredText[j]); found = 0; for(i=0 ; i < 26 ; i++) { found = found | attempROT(i,j); } if (!found) printf("[%d]: No Candidate.\n",j+1); } }