[REPRODUCCIÓN DE MÚSICA] DAVID J. MALAN: Muy bien. Esto es CS50, y esto es el fin de semana cuatro. Y uno de los temas hoy es el de la ciencia forense digital, el arte de la recuperación de la información. Y, en efecto, a pesar de que usted está en el medio en estos momentos de la Paz en Tres y Breakout, la próxima semana, la atención se centrará en precisamente este dominio. Así que uno de los trabajos más maravillosos que jamás tenía estaba de vuelta en la escuela de posgrado, cuando trabajaba para el local de Middlesex County District Attorney de oficina, haciendo los forenses trabajan. Así que, esencialmente, el Massachusetts Policía del Estado, en ocasiones, cuando se trabaja en los casos haría traer cosas como discos duros y disquetes y tarjetas de memoria y similares. Y se les entregara para mí y mi mentor, y nuestro objetivo era encontrar pruebas, si había alguna, en estos medios. Atisbos Ahora, es posible que haya visto de este mundo de la ciencia forense en los medios de comunicación, la televisión y las películas. Pero el trabajo que tenía, y atrevería a decir que ese mundo, no es bastante como usted verá. Echemos un vistazo a lo que lo que has visto. [REPRODUCCIÓN DE VÍDEO] -OK. Ahora, vamos a obtener un buen vistazo. [REPRODUCCIÓN DE MÚSICA] -Mantenga Ella. Corre que volver. Espera un minuto. Ir a la derecha. -Hay. Congele eso. De pantalla Full. -OK. Congele eso. Endurecerá hasta en eso, ¿verdad? -vector En el que chico por la rueda trasera. -zoom En aquí en este lugar. -Con El equipo adecuado, la imagen se puede ampliar y afilada. ¿Qué es eso? -Es Un programa de mejora. -¿Puedes Claro que cualquier? -No Sé. Vamos a mejorarlo. -Mejorar Sección A6. Aumenté el detalle, y-- -Creo Hay suficiente para mejorar. Suelte a mi pantalla. -I Mejoró la reflexión en su ojo. -Vamos Ejecutar esto a través de mejora de vídeo. -Edgar, Puedes mejorar esto? -hang Sucesivamente. -Llevo Trabajando en esta reflexión. Reflexión de alguien -Hay. -Reflexión. -Hay Un reflejo de la cara del hombre. Reflexión -El! -Hay Una reflexión. -zoom En el espejo. Se puede ver un reflejo. -CAN A mejorar la imagen de aquí? -CAN A potenciarlo? -CAN A potenciarlo? -¿Podemos Mejoramos esto? -CAN A potenciarlo? -Mantenga En un segundo. Voy a Mejorar. -zoom En la puerta. -veces 10. -Zoom. -Mover En. -Más. Espera, detente. -Stop. -PAUSE Ella. Nos -Girar 75 grados alrededor de la vertical, por favor. -Stop. Volver a la parte sobre la puerta de nuevo. -Consiguió Una mejora de imagen de mapa de bits que pueden? -Quizá Podemos utilizar el Pradeep Singh método para ver por las ventanas. -El Software es estado de la técnica. -El Valor propio está apagado. -Con La derecha combinación de algorithms-- Iluminación llevado de -Él algoritmos para el siguiente nivel, y puedo utilizarlos para mejorar esta fotografía. -lock En agrandar y el eje z. -Mejorar. Mejorar. -Mejorar. -Freeze Y mejorar. [FIN REPRODUCCIÓN DE VÍDEO] DAVID J. MALAN: Así que estos son todas las palabras, pero no eran usado en oraciones correctamente. Y de hecho, en el futuro, en cualquier momento, por favor, escuche a alguien decir la palabra, "Mejorar" risa un poco. Porque cuando se trata de mejorar, por ejemplo, esto es lo que sucede. Así que aquí está una foto magnífica. Esto es propio de Daven CS50. Y suponemos que queríamos centrarse en el brillo en sus ojos, o el reflejo de la malo que era claramente capturado por la cámara de seguridad. Esto es lo que ocurre cuando hacer zoom en una imagen que tiene sólo un número finito de bits asociados. Eso es lo que puedes conseguir. Y, en efecto, en el ojo de Daven no es más que cuatro, tal vez seis píxeles que componen exactamente lo estaba brillando allí. Así de problemas Cuatro tendrá en última instancia explorar este mundo, en particular por la naturaleza de algo que llamamos archivo i / o, en su I / O es sólo una forma elegante de diciendo de entrada y salida. Así hasta el momento, todas las interacciones que hemos tenido con una computadora han sido en gran parte con su teclado y la pantalla, pero no tanto con el disco duro, o el ahorro de los archivos más allá de los que mismo escribe. Sus programas hasta ahora tienen no estado creando, y el ahorro, y la actualización de sus propios archivos. Bueno, ¿qué es un archivo? Bueno, algo así como un archivo JPEG. Esta es una imagen que te pueden tener o subir a Facebook, o ver cualquier parte de la web. De hecho, esa foto que acabamos de sierra de Daven era un JPEG. Y lo que es interesante acerca de los archivos, como los archivos JPEG es que pueden ser identificadas, típicamente, mediante ciertos patrones de bits. En otras palabras, ¿qué es lo que distingue a un JPEG desde un GIF desde un PING desde una Palabra documento de un archivo de Excel? Bueno, es simplemente diferente patrones de bits. Y esos patrones son diferentes por lo general en el inicio de esos archivos. Así que cuando el equipo abre una Palabra doc, o cuando un equipo se abre un archivo JPEG, se ve normalmente en la primero varios bits en el archivo. Y si se reconoce un patrón, que dice, oh, esto es una imagen. Permítanme exhibo a el usuario como un gráfico. O, oh, esto se parece a un documento de Word. Déjame mostrarte al usuario como un ensayo. Así, por ejemplo, archivos JPEG, Resulta que son bastante sofisticado debajo de la capucha. Pero los tres primeros bytes en la mayoría de cada JPEG empezar con estos tres números. Así byte cero, uno, y dos son, en la mayoría de cada JPEG, 255, entonces el número 216, entonces el número 255. Y lo que podrás para empezar a hacer la semana que viene en realidad está metiendo debajo el capó de archivos como archivos JPEG y al igual que los archivos de mapa de bits, y ver Lo que siempre ha estado ahí todo el tiempo como usted ha estado usando una computadora. Pero lo que hay allí no es típicamente escrita como números decimales como este. Los informáticos no hacen tienden a hablar en decimal. En realidad, no hablan en binario. Normalmente, cuando queremos para expresar números, realmente usamos hexadecimal, que usted puede recordar de, por ejemplo, de problemas Uno, que desafió a pensar en un sistema diferente. Nosotros, por supuesto, estamos familiarizados con decimales, del cero al nueve. Hablamos de binario. Y nosotros realmente no tenemos de usar que mucho aquí en adelante, porque los ordenadores que utilizarán. Pero los programadores lo hará muy a menudo, pero no siempre, utilizar hexadecimal, que sólo significa usted tiene 16 letras en su alfabeto, en lugar de dos o 10. Entonces, ¿cómo contar a un mayor de nueve de cada hexadecimal? Vas 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, sólo por convención. Pero lo que es fundamental es que cada de ellos es un solo símbolo. No hay 10. No hay 11, per se, debido a que cada de sus cifras, al igual que en decimal y al igual que en el sistema binario, sólo debe ser un solo carácter, por convención. Así que a continuación es el alfabeto que tenemos a nuestra disposición para hexadecimal. Así que lo que tiene un aspecto un JPEG como si eran para escribir los tres primeros No bytes como decimal, pero, por ejemplo, como hexadecimal? ¿Y por qué es hexagonal incluso tan útil? Bueno, un rápido vistazo a un ejemplo. Así que si yo escribo los bits que representar estos numbers-- decimal esto podría ser un poco oxidado ahora desde hace unas semanas, pero el de la izquierda y la derecho son bastante fácil. 255 era el número más grande que podría representar con ocho bits. Fue todo unos. Así que el único que está ligeramente interesante es el del medio. Y si lo haces tipo de la matemáticas, se deduce que, de hecho, que el patrón de una y ceros representa 216. Así que vamos a estipular ahora que estos son correctos. Pero ¿por qué es interesante? Bueno, un byte, por supuesto, es de ocho bits. Y resulta que si usted piensa de un byte como dos trozos de cuatro bits, como este. Quisiera añadir algo de espacio. Así que antes, después. Acabo de añadir un poco de espacio en blanco por el amor de la visualización aquí. ¿Cómo podemos ahora representar en, digamos, hexadecimal cada quad de bits, cada conjunto de cuatro bits? Así, por ejemplo, a la izquierda ahora, tenemos 1111 en binario. ¿Cuál es ese número en decimal, si lo hace fuera de las matemáticas? Usted tiene el lugar de las unidades, el lugar de dos en dos, el lugar a cuatro patas, y el lugar ochos. AUDIENCIA: 15. DAVID J. MALAN: Es 15. Así que si lo hacemos ocho más cuatro más dos más uno, obtenemos 15. Así que podría anotar 15 infra 1111, pero el punto aquí es hexadecimal, no decimal. Así que en lugar de escribir 15, 1-5, Voy a escribir que en hexadecimal, que si piensa volver, si usted tiene cero a través de f, lo que se 15 va a ser? AUDIENCIA: f. DAVID J. MALAN: Así que resulta que del f. Y usted puede trabajar en eso, diciendo: así, si a es 10, entonces bien, f es de 15. Así que de hecho, podríamos reescribir Este mismo conjunto de números como f f. Y luego, si hacemos un poco de matemáticas, vamos a deducir que eso es d. Ocho es bastante fácil, ya que tener un uno en el lugar ochos. Y luego, tenemos un par más de f f. Así que lo que los humanos tienden a hacer por convención cuando utilizan hexadecimal es simplemente escribir esto un poco más sucinta, deshacerse de la mayor parte de ese espacio en blanco. Y sólo para ser súper claro para lectores que esta es hexadecimal, el simple convención entre los seres humanos se le escriben cero x, que no tiene otro significado de un identificador visual de, aquí viene un número hexadecimal. Y entonces, de poner los dos dígitos, f f en este caso, a continuación, d a, entonces f f. Así que cuento largo, hexadecimal sólo tiende para ser útil porque cada uno de sus dígitos, del cero al f, perfectamente líneas con un patrón de cuatro bits. Así que si usted tiene dos dígitos hexadecimales, cero a la F, y otra vez, que le da a la perfección ocho bits o un byte. Así que por eso se tiende a ser útil convencionalmente. No hay intelectual contenido realmente más allá de eso, aparte de su utilidad real. Ahora los archivos JPEG no son la única formatos de archivos de gráficos. Usted puede recordar que hay archivos de este tipo en el mundo, por lo menos desde hace unos años. Así que esto era en realidad instalado en Windows XP en millones de ordenadores de todo el mundo. Y este era un archivo de mapa de bits, BMP. Y un archivo de mapa de bits, como se verá el próximo semana, sólo significa un patrón de puntos, píxeles como se les llama, un mapa a partir de los bits, de verdad. Así que lo que es interesante, sin embargo, acerca de este formato de archivo, BMP, es que debajo de la capilla, que cuenta con más de sólo tres bytes que componen su cabecera, por lo hablar, los primeros bocados. En realidad se ve un poco complicado a primera vista. Y verá esto en el conjunto P. Y conseguir algo en particular de esta empresa que no es tan importante, ya que sólo el hecho de que al comienzo de cada mapa de bits archivo, un formato gráfico, hay todo un montón de números. Ahora Microsoft, el autor de este formato, tiende a llamar a los Las cosas no enteros y caracteres y flotadores pero las palabras y d palabras y largos y bytes. Así que son sólo diferentes tipos de datos. Son diferentes nombres para la misma cosa. Pero verás que en P Set Four. Pero esto es sólo para decir que si un ser humano doble clics algún archivo BMP en su o su disco duro, y una ventana se abre hasta él o ella que la imagen que muestra, eso sucedió porque el operativo sistema presumiblemente notó no sólo la extensión de archivo BMP en el nombre del archivo, sino también el hecho de que hay algo de convención para el patrón de bits en el comienzo de ese archivo de mapa de bits. Pero ahora vamos a centrarnos en un archivo complicada tal, sino en algo como esto. Supongamos que aquí en GEdit, I sólo tienen los inicios de un programa que es bastante simple. Tengo un poco incluye hasta arriba. Ahora tengo "structs.h" # include pero Voy a volver a eso en un momento. Pero esto es útil por ahora. Así que este es un programa eso va a aplicar como la base de datos del registrador. Así que una base de datos de los estudiantes, y todos los estudiantes en el mundo tiene un nombre y una casa y probablemente algunos otras cosas, pero vamos a mantener las cosas simples. Cada estudiante tiene un nombre y una casa. Así que si yo quería escribir una programa cuyo propósito en la vida fue simplemente para recorrer desde cero en un máximo de tres, si hay tres estudiantes en la Universidad de Harvard. Y yo sólo quiero llegar, mediante GetString, el nombre de cada estudiante y de la casa, y luego simplemente imprimir aquellos cabo. Esto es algo así como la Semana Uno, Semana Dos cosas ahora, donde yo sólo quiero una para bucle o algo por el estilo. Y quiero llamar GetString algunos veces y, a continuación, se imprimen f varias veces. Entonces, ¿cómo podría yo hacer esto, sin embargo, cuando un nombre y una casa están involucrados para cada estudiante? Así que mi primer instinto podría la de hacer algo como esto. Yo podría decir primero, bueno, dame, decir, una matriz de cadenas llamados nombres. Y yo no quiero un hardcode tres aquí. ¿Qué quiero poner allí? Para que los estudiantes, porque eso es sólo una constante declarada en la parte superior, sólo para que yo no tengo que codificar tres en múltiples lugares. De esta manera, puedo cambiarlo un solo lugar, y que afecta a un cambio en todas partes. Y entonces, yo podría hacer cadena alberga ESTUDIANTES. Y ahora, yo podría hacer algo como for (int i = 0; i