[MUSIC JOC] David J. MALAN: Bine. Acest lucru este CS50, iar această este sfârșitul de patru saptamani. Iar unul dintre subiectele de astăzi este că de criminalistica digitale, arta de a recupera informații. Și într-adevăr, chiar dacă tu ești în mijlocul chiar acum de Pace de la Three și Breakout, săptămâna viitoare, accentul se va pune pe tocmai acest domeniu. Deci, una din cele mai tari locuri de muncă am vreodată a avut a fost din nou în școală absolvent, atunci când am fost de lucru pentru locale Middlesex County District Attorney lui birou, fac criminalistica de lucru. Deci, în esență, Massachusetts Poliția de stat, pe ocazie, atunci când se lucrează la cazuri ar aduce în lucruri cum ar fi hard disk-uri și dischete și carduri de memorie și altele asemenea. Și ei le-ar preda la mine și mentorul meu, și scopul nostru a fost de a găsi dovezi, dacă nu a fost cazul, pe aceste medii. Sclipiri Acum, este posibil să fi văzut din această lume de criminalistica în mass-media, TV și filme. Dar treaba am avut, și Îndrăznesc să spun că lumea, Nu este destul ca te-ar vedea. Să aruncăm o privire la ceea ce probabil ati vazut. [VIDEO PLAYBACK] -OK. Acum, sa trecem o privire bine la tine. [MUSIC JOC] Stai așa. Fugi înapoi. Așteaptă un minut. Du-te drept. Acolo. Freeze asta. Full-ecran. -OK. Freeze asta. -Tighten Pe care, da? -Vector În pe care tip de roata din spate. -Zoom În chiar aici, pe acest loc. -Cu Echipamentul potrivit, Imaginea poate fi mărită și ascuțit. Ce-i asta? -E Un program de îmbunătățire. Pot tu clar că la orice? -Nu Stiu. Să spori. -Enhance Secțiunea A6. Am îmbunătățit detaliu, si-- -Cred Nu e de ajuns pentru a spori. Eliberați-l la ecranul meu. -Am Sporită reflectarea în ochi. -Sa Rula acest lucru printr- accesoriu video. -Edgar, Puteți îmbunătăți acest lucru? -Hang Pe. -Am Fost de lucru pe această reflecție. Reflecție cuiva -Este. -Reflection. -E O reflectare a feței bărbatului. Reflecție -Contravaloarea! -E O reflecție. -Zoom În pe oglinda. Puteți vedea o reflecție. -Poti Îmbunătăți imaginea de aici? -Pot Ai spori? -Pot Ai spori? -Putem Spori acest lucru? -Pot Ai spori? -Stai Pe un al doilea. Voi spori. -Zoom În pe ușă. Vremurile 10. -Zoom. Mișcă în. -Mai. Stai, nu mai. -Nu. -Pause Ea. Rotiți cilindrul ne 75 de grade în jurul verticală, vă rog. -Nu. Du-te înapoi la partea despre ușa din nou. -Ai Un potențiator de imagine care poate bitmap? Poate putem folosi Pradeep Singh Metoda de a vedea în ferestre. -Contravaloarea Software-ul este de ultimă generație. -Contravaloarea Valoare proprie este oprit. -Cu Dreapta combinație de algorithms-- Iluminare luate -E algoritmi la nivelul următor, si eu le pot folosi pentru a spori această fotografie. -Lock Pe mări și axa Z. -Enhance. Consolidarea. -Enhance. -Freeze Și spori. [END VIDEO PLAYBACK] David J. MALAN: Deci, acestea sunt toate cuvintele, dar ele nu au fost utilizate în propoziții corect. Și într-adevăr, în viitor, în orice moment, vă rog, auzi pe cineva spune cuvântul, "Spori", chicotit doar un pic. Pentru că atunci când încercați pentru a spori, de exemplu, aceasta este ceea ce se întâmplă. Deci, aici este o fotografie superba. Acest lucru este propriu Daven CS50 lui. Și să presupunem că ne-am dorit să concentreze asupra sclipire în ochi, sau reflectarea băiat rău că a fost în mod clar capturat de camera de securitate. Aceasta este ceea ce se întâmplă atunci când te măriți o imagine care are numai un număr finit de biți asociat. Asta este ceea ce v-ar lua. Și, într-adevăr, în ochi Daven lui este însă patru, poate șase pixeli care compun exact ceea ce a fost strălucitor acolo. Deci, problema Set patru vor avea în cele din urmă să exploreze această lume, în special prin natura ceva noi numim fișier I / O, în cazul în care I / O este doar un mod fantezist de spune de intrare și ieșire. Deci până acum, toate interacțiunile am avut-o cu un calculator au fost în mare parte cu dumneavoastră tastatură și ecran, dar nu atât de mult cu hard disk, sau salvarea de fișiere dincolo de cele pe care le te scrie. Programele au până acum Nu a fost crearea și salvarea, și actualizarea lor fișiere. Ei bine, ceea ce este un fișier? Ei bine, ceva de genul un JPEG. Aceasta este o imagine pe care s-ar putea au sau încărca pe Facebook, sau vedea oriunde pe web. Într-adevăr, fotografia ne-am a văzut de Daven a fost un JPEG. Și ceea ce este interesant despre fișiere, cum ar fi JPEG este faptul că acestea pot fi identificate, în mod tipic, de anumite modele de biți. Cu alte cuvinte, ceea ce se face că distinge un JPEG de la un GIF de la un ping de la un cuvânt document de la un fișier Excel? Ei bine, e doar diferit modele de biți. Și aceste modele diferite sunt de obicei, la începutul aceste fișiere. Așa că, atunci când computerul se deschide un Word doc, sau atunci când un calculator se deschide un JPEG, se pare de obicei la prima serie de biți în dosar. Și dacă se recunoaște un model, se spune, oh, aceasta este o imagine. Lasă-mă să-l afișeze la utilizatorul ca un grafic. Sau, oh, acest lucru arata ca un doc Word. Lasă-mă să-l arate la utilizatorul ca un eseu. Deci, de exemplu, JPEG, se pare, sunt destul de sofisticat sub capota. Dar primele trei octeti din mai toate JPEG începe cu aceste trei numere. Deci octet zero, unu, doi și sunt, în cele mai multe fiecare JPEG, 255, atunci numărul 216, atunci numărul 255. Și ceea ce vei putea pentru a începe să faci săptămâna viitoare este, de fapt bagi sub capota de fisiere cum ar fi JPEG și ca fișiere bitmap, și văzând ceea ce a fost mereu acolo pentru cât mai mult ca ai fost cu ajutorul unui calculator. Dar ceea ce este acolo nu este de obicei scris ca numere zecimale, cum ar fi acest lucru. Oamenii de stiinta de calculator nu au tendința de a vorbi în zecimal. Ei nu vorbesc cu adevărat în binar. De obicei, atunci când ne-o dorim pentru a exprima numere, vom folosi de fapt hexazecimal, care s-ar putea aminti de, să zicem, problema Set Unul, care a contestat să te gândești la un sistem diferit. Noi, desigur, sunt familiarizați cu zecimale, zero, prin noua. Am vorbit despre binar. Și noi nu prea am de a folosi atât de mult aici pe afară, pentru că computerele vor folosi asta. Dar programatori va foarte de multe ori, dar nu întotdeauna, utilizați hexazecimal, ceea ce înseamnă doar ai 16 litere din alfabetul, spre deosebire de două sau 10. Deci, cum a face tu numeri la mare decât nouă în hexazecimal? Mergi 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, doar prin convenție. Dar ceea ce este esențial este că fiecare dintre acestea este un singur simbol. Nu există nici o 10. Nu există nici o 11, în sine, pentru că fiecare de cifre dvs., la fel ca în zecimal și la fel ca în binar, ar trebui doar fie un singur caracter, prin convenție. Așa că atunci este alfabetul avem la dispoziția noastră pentru hexazecimal. Deci, ce arata o JPEG ca daca au fost de a scrie cele primele trei Nu bytes ca zecimal, dar, de exemplu, așa cum hexazecimal? Și de ce este hex chiar tot ce util? Ei bine, o privire rapidă la un exemplu. Deci, dacă am scrie biți care reprezintă aceste numere, zecimal acest lucru ar putea fi un pic ruginit acum de la câteva săptămâni înapoi, dar cea din stânga și un drept sunt destul de ușor. 255 a fost cel mai mare număr WE ar putea reprezenta cu opt biți. A fost toate cele. Deci, singurul care-i ușor interesant este cel din mijloc. Și dacă un fel de a face out matematica, va deduce că, într-adevăr, ca model de una și zero reprezintă 216. Așa că hai să prevadă pentru acum că acestea sunt corecte. Dar de ce este acest interesant? Ei bine, un octet, desigur, este de opt biti. Și se pare că, dacă credeți de un octet ca două bucăți de patru biți, ca aceasta. Lasă-mă să adăugați ceva spațiu. Deci, înainte, după. Tocmai am adăugat niște spațiu alb de dragul vizualizare lui aici. Cum am putea reprezenta acum în, să zicem, hexazecimal fiecare quad de biți, fiecare set de patru biți? Deci, de exemplu, pe partea stângă acum, avem 1111 în binar. Ce este acest număr în zecimal, dacă faci din matematica? Ai locul celor, locul doi cate doi, locul patru labe, și locul optari. Audiența: 15. David J. MALAN: E 15. Deci, dacă facem opt plus patru plus doi plus unu, avem 15. Așa că am putea scrie 15 de mai jos 1111, dar ideea aici este hexazecimal, nu zecimal. Deci, în loc de a scrie în jos 15, 1-5, Am de gând să scrie că în hex, care, dacă credeți înapoi, dacă aveți la zero prin f, ceea ce este de 15 va fi? Audiența: f. David J. MALAN: Deci, se dovedește că lui f. Și tu poți merge prin a spune, bine, în cazul în care o este de 10, atunci OK, f este de 15. Deci, într-adevăr, am putea rescrie acest același set de numere ar fi f f. Și apoi, dacă facem un pic de matematica, vom deduce că asta e d. Opt este destul de ușor, pentru că ne-am am unul în locul optari. Și atunci, avem un cuplu mai f f lui. Deci, ceea ce oamenii au tendința de a face, prin convenție atunci când utilizează hexazecimal este că doar Trimite aceasta un pic mai succint, scăpa de cele mai multe din acel spațiu alb. Și doar pentru a fi foarte clar pentru cititorii că aceasta este hexazecimal, Convenția de la simplu printre oameni se va scrie zero, x, care nu are altă semnificație decât un identificator vizuală a, aici vine un număr hexazecimal. Si apoi, ai pus cele două cifre, f f în acest caz, atunci d a, atunci f f. Deci, pe scurt, hexazecimal doar tinde pentru a fi utile pentru că fiecare dintre ei cifre, zero, prin f, perfect linii cu un model de patru biți. Deci, dacă aveți două cifre hexazecimale, zero, prin F, din nou și din nou, care vă oferă perfect opt biți sau un octet. Deci, de aceea tinde sa fi convențional util. Nu e nici un intelectual conținut într-adevăr dincolo de asta, altele decât utilitatea reală. Acum, JPEG nu sunt singura fișier formate pentru grafica. S-ar putea aminti că există fișiere, cum ar fi acest lucru din lume, cel puțin de câțiva ani. Deci asta a fost de fapt instalate în Windows XP pe milioane de PC-uri din intreaga lume. Și acesta a fost un fișier de tip bitmap, BMP. Și un fișier bitmap, după cum veți vedea în continuare săptămână, înseamnă doar un model de puncte, pixeli ca acestea sunt numite, o hartă pe biți, într-adevăr. Deci, ceea ce este interesant, însă, despre acest format de fișier, BMP, este că sub capota, se are mai mult de doar trei bytes care compun antet sale, așa de a vorbi, primele câteva mușcături. De fapt, pare un pic complicat la prima vedere. Și veți vedea acest lucru în setul P. Și obtinerea ceva în special de acest lucru acum nu este atât de important, ca doar faptul că, la începutul fiecărui bitmap fișier, un format grafic, există o grămadă de numere. Acum Microsoft, autor al acestui format, tinde să cheme pe cei Lucrurile nu int și caractere , pluteste, dar cuvintele și d cuvinte și lungi și bytes. Deci, ele sunt doar diferite tipuri de date. Sunt nume diferite pentru același lucru. Dar veți vedea că în P Set patru. Dar aceasta este doar să spun că, dacă un om dublu-clic pe un fisier BMP pe lui sau hard disk ei, și o fereastră se deschide care să arate că el sau ea a imaginii, că sa întâmplat pentru că de operare Sistemul presupune observat nu numai extensia BMP în numele de fișier, dar, de asemenea, faptul că există unele convenție la modelul de biți de la bun început de care fișier de tip bitmap. Dar să ne concentrăm acum asupra un astfel de dosar complicat, dar în schimb pe ceva de genul asta. Să presupunem că aici în gedit, I Trebuie doar începuturile de un program care este destul de simplu. Am niște include până sus. Acum am # include "structs.h", dar Voi reveni la faptul că într-o clipă. Dar acest lucru este util pentru acum. Deci, acesta este un program de care va pune în aplicare cum ar fi baza de date a registratorului. Deci, o bază de date de studenți, și fiecare elev din lume are un nume și o casă și, probabil, unele alte chestii, dar vom păstra simplu. Fiecare elev are un nume și o casă. Deci, dacă am vrut să scrie o program ale cărui scop în viață a fost doar pentru a repeta de la zero până la trei, în cazul în care există trei elevi de la Universitatea Harvard. Și eu vreau doar pentru a obține, cu ajutorul getString, Numele și casa fiecărui elev, și apoi doar imprima cele mai. Aceasta este un fel de Săptămâna Una, doua saptamani, lucrurile acum, unde vreau doar o pentru buclă sau ceva de genul asta. Și vreau să numesc getString câteva ori, și apoi imprimați f de câteva ori. Deci, cum s-ar putea face acest lucru, deși, atunci când atât un nume și o casă sunt implicate pentru fiecare elev? Deci, primul meu instinct ar putea fi de a face ceva de genul asta. S-ar putea spune în primul rând, bine, da-mi, spune, o serie de siruri de caractere, numite nume. Și eu nu vreau o hardcodati trei aici. Ce vreau să pun acolo? Astfel încât elevii, pentru că e doar o constantă a declarat în partea de sus, doar ca eu nu trebuie să hardcodati trei în mai multe locuri. În acest fel, am putea schimba un singur loc, și aceasta afectează o schimbare peste tot. Și apoi, s-ar putea face șir case elevi. Și acum, s-ar putea face ceva de genul pentru (int i = 0; i