[MÚSICA DE XOGO] DAVID J. Malan: Todo ben. Este é CS50, e este é o final da cuarta semana. E un dos temas hoxe é a de forense dixital, técnica de recuperar a información. E, de feito, moi aínda está no medio agora da Paz en Tres e Breakout, a próxima semana, o foco será en precisamente neste ámbito. Entón, un dos traballos máis legais que eu xa tivo foi en posgrao, cando estaba a traballar para o lugar, Middlesex County District Attorney oficina, facendo forense traballar. Entón, basicamente, o Massachusetts Policía do Estado, na ocasión, cando se traballa en casos sería traer cousas como discos duros e disquetes e tarxetas de memoria e similares. E eles ían entrega-los para min e meu mentor, eo noso obxectivo era atopar probas, se había algún, nestes medios. Reflexos Agora, pode ver deste mundo da ciencia forense nos medios, televisión e cine. Pero o traballo que eu tiña, e atrévome a dicir que o mundo, non é ben así que ve-lo. Imos dar un ollo ao que probablemente xa viu. [REPRODUCIÓN] -OK. Agora, imos dar unha boa ollada en ti. [MÚSICA DE XOGO] -Segure El. Correr de volta. Espere un minuto. Vaia á dereita. -Hai. Conxelar iso. Pantalla -Full. -OK. Conxelar iso. -Tighten-Se sobre iso, vai? -vector En en que cara pola roda traseira. -zoom En dereito aquí neste lugar. -Con O equipo certo, o imaxe pode ser máis grande e afiada. -Cal Que é iso? -É Un programa de mellora. -Consegue Suposto se procede? Non o sei. Imos melloralo. -Aprimore Sección A6. Eu aumentei o detalle, e-- -Penso Hai abondo para mellorar. Liberalos lo para a pantalla do ordenador. I Reforzada a reflexión nos seus ollos. -Imos Executar este medio perfeccionamento de vídeo. -Edgar, Pode mellorar isto? -hang en. Eu Benvida a traballar sobre esta reflexión. Reflexo de alguén -Hai. -Reflection. -Hai Un reflexo da cara do home. Reflexión -The! -Hai Unha reflexión. -zoom En no espello. Podes ver un reflexo. Vostede-pode mellorar a imaxe dende aquí? Vostede-pode mellora-lo? Vostede-pode mellora-lo? -Podemos Mellorar iso? Vostede-pode mellora-lo? -Segure Un segundo. Vou mellorar. -zoom En na porta. -Times 10. -Zoom. -Mover En. -Máis. Espere, pare. Pare. -PAUSE El. -Rotate Nos 75 graos en torno á vertical, por favor. Pare. Voltar para a parte sobre a porta de novo. -Ten Un intensificador de imaxe que pode bitmap? -Talvez Podemos usar o Pradeep Singh método para ver nas fiestras. -The Software é o estado da arte. -The Autovalor está desactivado. -Con Dereita combinación de algorithms-- Iluminación tomadas -El algoritmos para o seguinte nivel, e podo usalos para mellorar esta foto. -lock On e ampliar o eixe z. -Aprimore. Mellorar. -Aprimore. -Freeze E mellorar. [FIN REPRODUCIÓN DE VIDEO] DAVID J. Malan: Entón, estas son todas as palabras, pero non eran usado en frases correctamente. E, de feito, no futuro, a calquera hora, por favor, escoita a alguén dicir a palabra, "Mellorar", rir un pouco. Porque cando se trata de mellorar, por exemplo, iso é o que pasa. Entón aquí vai unha foto fermoso. Isto é propio Daven de CS50. E supoña que queriamos centrar na brillo nos ollos, ou a reflexión do bandido que estaba claramente capturada pola cámara de seguridade. Isto é o que pasa cando aumentar o zoom nunha imaxe que ten só un número finito de bits asociados. Isto é o que ía estar. E, de feito, está no ollo do Daven é, pero catro, quizais seis píxeles que compoñen o que foi brillo alí. Entón Problem Set Catro acabará por ter explorar este mundo, especialmente pola natureza de algo que chamamos ficheiro E /, onde i / o é só un xeito elegante de dicindo entrada e saída. Entón, ata agora, as interaccións que tivemos con un ordenador ser en gran parte co seu teclado e pantalla, pero non tanto co disco duro, ou gravar os ficheiros ademais dos que vostede mesmo escribir. Os seus programas, ata agora, ten non chegou a crear e gardar, e actualización dos seus propios arquivos. Ben, o que é un arquivo? Ben, algo así como un JPEG. Esta é unha imaxe que pode ter ou subir a Facebook, ou ver en calquera lugar na web. De feito, esta imaxe que acabamos de serra de Daven foi un JPEG. E o que é interesante sobre arquivos como JPEGs é que poden ser identificados, tipicamente, por certos patróns de bits. Noutras palabras, que é o que distingue un JPEG dende un GIF dende un Ping desde unha palabra documento a partir dun arquivo de Excel? Ben, é só diferente patróns de bits. E eses patróns diferentes son xeralmente no inicio destes ficheiros. Así que cando o computador abre unha Palabra doc, ou cando un ordenador abre un JPEG, parece tipicamente na primeiro de varios bits no ficheiro. E se recoñece un defecto, el di, oh, esta é unha imaxe. Deixe-me presenta-lo ao o usuario como un gráfico. Ou, oh, iso parece un documento de Word. Deixe-me amosar ao usuario como un ensaio. Así, por exemplo, JPEGs, ao parecer, son moi sofisticado debaixo do capó. Pero os tres primeiros bytes en case todas as JPEG comezar con estes tres números. Así byte cero, un, dous e son, en máis cada JPEG, 255, entón o número 216, a continuación, o número 255. E o que vai ser capaz para comezar a facer a próxima semana é, en realidade, cutucando por baixo a capa de arquivos como JPEGs e como ficheiros de mapa de bits, e vendo o que sempre estivo aí durante tanto tempo como está a usar un ordenador. Pero o que está aí non é tipicamente escrito como números decimais como este. Os científicos da computación non tenden a falar en decimal. Realmente non falan en binario. Normalmente, cando queremos para expresar números, nós realmente usar hexadecimal, que pode lembrar de, digamos, Conxunto de Problemas Un deles, que desafiou pensar nun sistema diferente. Nós, por suposto, está familiarizado con decimal, de cero a nove. Nós falamos sobre binario. E nós realmente non teñen usar moito aquí en diante, porque os ordenadores irán usar iso. Pero os desenvolvedores van moi moitas veces, pero non sempre, usar hexadecimal, o que significa só ten 16 letras no alfabeto, en oposición a dúas ou 10. Entón, como contar ata máis de nove en hexadecimal? Vai 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, só por convención. Pero o que é fundamental é que cada destes é un único símbolo. Non hai 10. Non hai 11, por si só, xa que cada dos seus díxitos, así como en decimal e, así como no sistema binario, que só ser un personaxe único, por convención. Para que, entón, é o alfabeto que temos á nosa disposición para hexadecimal. Entón, o que un JPEG ollar como se eran para escribir os tres primeiros non bytes como decimal, pero, por exemplo, como hexadecimal? E por que é hex mesmo tan útil? Ben, unha rápida ollo a un exemplo. Entón, se eu escribir os bits que representan estes números de decimal isto pode ser un pouco enferrujado agora dalgunhas semanas, pero o esquerdo e o un dereito é moi sinxelo. 255 foi o maior que o número podería representar con oito bits. Era todo queridos. Entón, a única que se lixeiramente interesante é o do medio. E se tipo de facer a matemáticas, vai deducir que, de feito, este patrón de un e ceros representa 216. Entón imos estipular para agora que estes son correctos. Pero por que isto é interesante? Ben, un byte, por suposto, é de oito bits. E verifícase que se pensar dun byte de dous bloques de catro bits, así. Déixeme só engadir un pouco de espazo. Entón, antes, despois. Acabo de engadir un espazo en branco polo amor de visualización aquí. Como podemos agora representar en, digamos, hexadecimal cada catro de bits, cada conxunto de catro bits? Así, por exemplo, na parte esquerda agora temos 1111 en binario. Cal é ese número en decimal, se fai a matemática? Ten a casa das unidades, o lugar dous, o lugar de catro, eo lugar oitos. Audiencia: 15. DAVID J. Malan: É 15. Entón, se facemos oito catro dous máis un, temos 15. Entón, eu podería escribir 15 baixo 1111, pero o punto aquí é hexadecimal, non decimal. Entón, en vez de escribir 15, 1-5, Vou escribir isto en hexadecimal, que se ollar cara atrás, se ten cero a f, o que é 15 será? Audiencia: f. DAVID J. Malan: Entón non é que a súa f. E pode solucionar isto, dicindo: así, se un é 10, entón OK, f é 15. Entón, en realidade, poderiamos reescribir este mesmo conxunto de números como f f. E entón, se facemos un pouco de matemáticas, imos deducir que isto é d. Oito é moi fácil, porque ter un no lugar oitos. E entón, temos unha parella máis f f do. Entón, o que os seres humanos tenden a facer por convención cando usan hexadecimal é que simplemente escribir este un pouco máis sucinta, se librar da maior parte deste espazo en branco. E só para ser super claro para lectores que esta é hexadecimal, a simple convención entre seres humanos é escribir de cero x, que non ten outro significado que un identificador visual, aquí vén un número hexadecimal. E entón, se pon os dous díxitos, f f neste caso, a continuación, d a, entón f f. Entón, longa historia curta, hexadecimal só tende para ser útil porque cada un dos seus díxitos, de cero a f, perfectamente liñas arriba con un nivel de catro bits. Entón, se ten dous díxitos hexadecimais, cero a F, unha e outra vez, que lle dá perfectamente oito bits ou un byte. Entón é por iso que tende a convencionalmente ser útil. Non hai intelectual contido moi ademais, distinta da súa real utilidade. Agora JPEGs non son o único formatos de ficheiro para gráficos. Debe lembrar que hai arquivos como este no mundo, polo menos desde hai uns anos. Polo tanto, este foi realmente instalado en Windows XP en millóns de PCs de todo o mundo. E este era un arquivo de mapa de bits, BMP. E un ficheiro de mapa de bits, como podes ver no seguinte semana, só significa un patrón de puntos, píxeles, como son chamados, Un mapa en anacos, en realidade. Entón, o que é interesante, con todo, sobre o formato de arquivo, BMP, é que debaixo do capó, el ten máis que tres bytes que compoñer seu cabeceira, así dicir, as primeiras mordidas. El realmente parece un pouco complicado a primeira vista. E vai ver iso no conxunto P. E recibir algo especial deste momento non é tan importante, como só o feito que, ao comezo de cada bitmap ficheiro, un formato gráfico, hai unha morea de números. Agora, Microsoft, a autor deste formato, tende a chamar os As cousas non enteiros e caracteres e carrozas, pero palabras e d palabras e ansia e bytes. Entón, son só diferentes tipos de datos. Son nomes diferentes para o mesmo. Pero vai ver que en I Set Four. Pero isto é só para dicir que se un ser humano clic dúas veces nalgún arquivo bmp no seu ou o seu disco duro, e unha ventá se abre up mostrando-lle que a imaxe, isto aconteceu porque a operación sistema presuntamente notado non só a extensión do ficheiro bmp o nome do ficheiro, pero tamén o feito de que hai algúns convenio para o estándar de bits no inicio deste arquivo bitmap. Pero imos agora concentrar-se en un arquivo complicado tal, pero en algo como isto. Supoña que aquí en gedit, I só ten o comezo dun programa que é moi sinxelo. Teño algunhas inclúe enriba. Agora eu teño "structs.h" # include pero Vou volver a iso nun momento. Pero isto é útil para agora. Polo tanto, este é un programa que vai aplicar como base de datos do rexistro. Así, unha base de datos de alumnos, e cada alumno no mundo ten un nome e unha casa e, probablemente, algúns outras cousas, pero imos mantelo simple. Cada estudante ten un nome e unha casa. Entón, se eu quería escribir un programa cuxo obxectivo na vida foi só para facer unha iteración do zerar en ata tres, se hai tres estudantes na Universidade de Harvard. E eu só quero incorporarse, usando GetString, O nome de cada alumno e da casa, e despois é só imprimir os para fóra. Esta é unha especie de Semana One, Two Week cousas agora, onde eu só quero unha para loop ou algo parecido. E quero chamar GetString algúns veces, e logo imprimir f algunhas veces. Entón, como eu podería facelo, con todo, cando un nome e unha casa están implicados para cada alumno? Entón, o meu primeiro instinto pode ser para facer algo así. Podería dicir en primeiro lugar, así, deixa-me, dicir, unha matriz de cadeas chamados nomes. E eu non quero un hardcode tres aquí. O que quero poñer alí? Para que os alumnos, porque iso é só unha constante declarado na parte superior, só para que eu non teño que codificar tres en varios lugares. Desta forma, podo mudalo un lugar, e iso afecta un cambio en todas as partes. E entón, eu podería facer cadea alberga alumnos. E agora, eu podería facer algo así for (int i = 0; i