[Musik zu spielen] David J. MALAN: In Ordnung. Dies ist CS50, und dies ist das Ende der Woche vier. Und eines der Themen heute ist, dass der digitalen Forensik, die Kunst der Wiederherstellung von Informationen. Und in der Tat, auch wenn Sie sind in der Mitte jetzt des Friedens bei Drei und Breakout, nächste Woche, der Fokus auf sein genau diese Domäne. So einer der coolsten Jobs, die ich jemals hatte, war zurück in Graduiertenschule, als ich für den lokalen Arbeits Middlesex County Bezirksstaatsanwalts Büro, macht Forensik zu arbeiten. So im Wesentlichen, das Massachusetts Staatspolizei, bei Gelegenheit, bei der Arbeit an Fällen wäre bringen in Dinge wie Festplatten und Disketten und Speicherkarten und dergleichen. Und sie würde die Hand zu mir und meinem Mentor, und unser Ziel war es, Beweise zu finden, ob es eine, auf diesen Medien. Jetzt könnten Sie gesehen haben Einblicke von dieser Welt der Forensik in den Medien, TV und Filme. Aber der Job, den ich hatte, und wage zu behaupten, dass die Welt, ist nicht ganz wie man es sehen würde. Werfen wir einen Blick auf, was Sie haben wahrscheinlich gesehen. [VIDEO PLAYBACK] -OK. Jetzt wollen wir einen guten Blick auf Sie. [Musik zu spielen] -Halten Es. Führen Sie das zurück. -wait Eine Minute. Gehen Sie nach rechts. -Es. Einfrieren, dass. Full-Screen. -OK. Einfrieren, dass. Auf, dass eine Straffung, ja? -vector In auf, dass Guy von dem Hinterrad. -zoom In genau hier an dieser Stelle. -Mit der richtigen Ausrüstung, die Bild kann vergrößert und geschärft werden. -Was Ist das? -Es Ist eine Steigerungsprogramm. -Kann Sie klar, dass Sie überhaupt? Weiß ich nicht. Lassen Sie uns zu verbessern es. -Verbessern Abschnitt A6. Ich erhöhte das Detail, und-- -I Denke, es ist genug, um zu erhöhen. Lassen Sie es zu meinem Bildschirm. -I Verstärkt die Reflexion in ihrem Auge. -Let Dieses durchlaufen Video-Enhancement. -Edgar, Können Sie verbessern das? -hang Auf. -Ich Wurde auf dieser Reflexion arbeiten. -Es Ist jemand Reflexion. -Reflexion. -Es Ist ein Spiegelbild der das Gesicht des Mannes. -Der Reflexion! -Es Ist eine Reflexion. -zoom In auf dem Spiegel. Sie können eine Reflexion zu sehen. -Kann Verbessern Sie das Bild von hier? -Kann Sie es verbessern? -Kann Sie es verbessern? -Kann Erweitern wir das? -Kann Sie es verbessern? -Halten Auf einem zweiten. Ich werde zu verbessern. -zoom In an der Tür. -Fache 10. -zoom. -move In. -weitere. -wait, Zu stoppen. -stop. -PAUSE Es. -rotate Uns 75 Grad um die vertikale, bitte. -stop. Gehen Sie zurück zu dem Teil über der Tür wieder. -Haben Eine Bildverbesserung, die Bitmap kann? -Vielleicht Können wir die Pradeep Singh verwenden Methode, um in die Fenster sehen. -Der Software ist Stand der Technik. -Der Eigenwert ist aus. -Mit der rechten Kombination von algorithms-- -Er Genommen Beleuchtung Algorithmen, um die nächste Ebene, und ich kann sie zu bedienen verbessern Sie dieses Foto. -Verschluss Auf und vergrößern die z-Achse. -Verbessern. Zu verbessern. -Verbessern. -Freeze Und zu verbessern. [END VIDEO PLAYBACK] David J. MALAN: Das sind also Alle Wörter, aber sie waren nicht in Sätzen richtig eingesetzt. Und in der Tat in der Zukunft, zu jeder Zeit, Bitte hören Sie jemand sagen, das Wort, "Verbessern", Kichern nur ein kleines bisschen. Weil, wenn Sie versuchen, zu verbessern, zum Beispiel ist das, was passiert. Also hier ist ein wunderschönes Foto. Dies ist CS50 eigenen Daven. Und nehme an, dass wir es wollten konzentrieren sich in der Augenzwinkern, oder die Reflexion des Bösewicht, die eindeutig war durch die Überwachungskamera eingefangen. Dies ist, was passiert, wenn Sie vergrößern auf ein Bild, nur eine endliche Anzahl von Bits zugeordnet. Das ist, was Sie erhalten würden. Und in der Tat, in Daven Auge ist, sondern vier, vielleicht sechs Pixel dass genau das, was komponieren wurde dort schimmern. So Problem Set Vier letztlich haben Sie, diese Welt zu erforschen, insbesondere von Natur aus etwas wir nennen Datei-I / O, wobei I / O ist nur eine andere Art von sagen Eingang und Ausgang. So bislang alle Interaktionen wir mit einem Computer gehabt haben weitgehend mit waren Ihre Tastatur und der Bildschirm, aber nicht so sehr mit der Festplatte, oder Speichern von Dateien über die, die Sie selbst schreiben. Ihre Programme haben bisher nicht zu schaffen, und speichern, und Aktualisierung ihrer eigenen Dateien. Nun, was ist eine Datei? Nun, so etwas wie ein JPEG. Dies ist ein Bild, das Sie vielleicht haben oder Upload auf Facebook, oder sehen überall im Web. In der Tat, dass wir einfach Foto Säge Daven war ein JPEG. Und was ist interessant über Dateien wie JPEGs ist, dass sie identifiziert werden können, typischerweise durch bestimmte Muster von Bits. Mit anderen Worten, was ist es, dass unterscheidet ein JPEG aus einem GIF von einem PING aus einem Word- Dokument aus einer Excel-Datei? Nun, es ist einfach anders Muster von Bits. Und diese verschiedenen Muster sind normalerweise zu Beginn dieser Dateien. So dass, wenn Sie Ihren Computer öffnet ein Wort doc, oder wenn ein Computer öffnet ein JPEG, es sieht typischerweise bei der erste mehrere Bits in der Datei. Und wenn es ein Muster erkennt, es sagt, oh, ein Bild dafür. Lassen Sie mich zeigen Sie es auf der Benutzer als Grafik. Oder, oh, das sieht aus wie ein Word-Dokument. Lassen Sie mich es dem Benutzer als einem Essay. So zum Beispiel, JPEGs, es stellt sich heraus, sind ziemlich anspruchsvolle unter der Haube. Aber die ersten drei Bytes in den meisten jedes JPEG beginnen mit diesen drei Zahlen. So Byte null, eins und zwei sind in der Fast jeder JPEG, 255, dann wird die Anzahl 216, dann wird die Zahl 255. Und was Sie in der Lage sein, zu tun beginnen nächste Woche tatsächlich unter Stossen die Haube von Dateien wie JPEGs und wie Bitmap-Dateien, und zu sehen, was immer für wie lange Sie haben mit einem Computer gewesen. Aber was ist es in der Regel nicht wie Dezimalzahlen so geschrieben. Informatiker nicht neigen dazu, in Dezimal zu sprechen. Sie haben nicht wirklich in binärer sprechen. Normalerweise, wenn wir wollen, Zahlen auszudrücken, wir tatsächlich nutzen hexadezimal, die Sie sich erinnern können von, sagen wir, Problem-Set Eine, die in Frage gestellt Sie über ein anderes System nachdenken. Wir natürlich vertraut mit Nachkommastellen, Null bis Neun. Wir sprachen über binär. Und wir haben nicht wirklich so viel hier verwenden auf sich, weil Computer verwenden das. Aber Programmierer sehr Oft, aber nicht immer, hexadezimale, was bedeutet nur, Sie haben 16 Buchstaben im Alphabet Ihr, im Gegensatz zu zwei oder 10. So, wie Sie zählen zu höheren als neun in Hexadezimal? Sie gehen 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, nur durch Konvention. Aber was ist Schlüssel ist, dass jeder von diesen ist ein einzelnes Symbol. Es gibt keine 10. Es gibt keine 11 per se, da jedes Ihre Stellen, genau wie in Dezimal Und genau wie in binärer, sollte nur ein einzelner Charakter, durch Konvention. So dass dann das Alphabet haben wir zur Verfügung für hexadezimal. Also, was macht ein JPEG aussehen, wenn Sie waren zu schreiben, jene ersten drei Byte nicht als Dezimalzahl, aber beispielsweise als hexadezimalen? Und warum ist hex auch alles, was nützlich? Nun, ein kurzer Blick auf ein Beispiel. Also, wenn ich schreiben, die Bits, die stellen diese dezimal numbers-- könnte dies ein wenig rostig sein jetzt von ein paar Wochen zurück, aber der linke und der Richtige sind ziemlich einfach. 255 war die größte Zahl, die wir konnte mit acht Bits repräsentieren. Es war nur Einsen. Also das einzige, das leicht ist Interessant ist auch die mittleren. Und wenn Sie Art tun sich die Mathe, werden Sie folgern, dass, ja, das Muster ein und Nullen repräsentiert 216. Also lasst uns einfach vor, für jetzt, dass diese korrekt sind. Aber warum ist das interessant? Nun, ein Byte, natürlich, ist acht Bits. Und es stellt sich heraus, dass, wenn Sie denken, ein Byte als zwei Stücke von vier Bits, so was. Lassen Sie mich nur etwas Platz hinzufügen. So vor, nach. Ich habe gerade etwas Leerraum hinzugefügt zur Visualisierung der hier willen. Wie können wir nun in repräsentieren, sagen wir, hexadezimal jeweils Quad von Bits, wobei jede Gruppe von vier Bits? So zum Beispiel auf der linken Seite jetzt haben wir 1111 in binär. Was ist diese Zahl in Dezimal-, wenn Sie die Mathematik zu tun? Sie haben die Einerstelle, die zu zweit Platz, die Vieren statt, und die Achter Platz. ZIELGRUPPE: 15. David J. MALAN: Es ist 15. Also, wenn wir acht plus vier plus zwei plus eins, bekommen wir 15. So konnte ich unten aufschreiben 15 1111, aber der springende Punkt hier hexadezimal, nicht dezimal. Also statt der Niederschrift 15, 1-5, Ich werde das in Hex zu schreiben, die, wenn Sie zurückdenken, wenn Sie Null bis f, was 15 sein wird? ZIELGRUPPE: f. David J. MALAN: So stellt sich heraus, es ist f. Und Sie können daran arbeiten heraus mit den Worten: Nun, wenn eine 10 ist, dann OK, f 15. Also ja, wir schreiben konnte Die gleiche Reihe von Zahlen als f f. Und dann, wenn wir ein bisschen Mathematik, wir folgern, dass das ist, d. Acht ist recht einfach, denn wir eine Eins in der Achter Platz. Und dann haben wir noch ein paar f f ist. Also, was Menschen dazu neigen, durch Konvention zu tun wenn sie verwenden hexadezimale ist sie nur schreibe ein wenig kurz und bündig, der meisten dieser weißen Raum loszuwerden. Und nur um super klar zu sein Leser, dass dies hexadezimal, die einfache Konvention unter Menschen wird Sie schreiben Null x, der keine andere Bedeutung hat als ein visueller Kennung, hier kommt ein Hex-Zahl. Und dann setzen Sie die beiden Ziffern, f f in diesem Fall, so d a ist, dann f f. So lange Rede kurzer Sinn, hexadezimale nur tendenziell nützlich zu sein, da jedes der Ziffern Null bis f, perfekt Linien mit einem Muster von vier Bits. Also, wenn Sie zwei hexadezimalen Ziffern haben, Null bis F, wieder und wieder, das gibt Ihnen perfekt acht Bits oder ein Byte. Also das ist, warum es dazu neigt, sein konventionell nützlich. Es gibt keine geistigen Inhalt wirklich darüber hinaus, außer seiner eigentlichen Programm. Jetzt JPEG sind nicht die einzige Dateiformate für Grafiken. Sie erinnern sich vielleicht, dass es Dateien wie diese in der Welt, zumindest von ein paar Jahre zurück. Also eigentlich war diese in Windows XP installiert auf Millionen PCs weltweit. Und das war eine Bitmap-Datei, BMP. Und eine Bitmap-Datei, wie Sie sehen werden neben Woche, bedeutet nur ein Muster aus Punkten, Pixel, wie sie genannt werden, Eine Karte auf Bits, wirklich. Also, was ist interessant, wenn auch, über dieses Dateiformat, BMP, ist dass unter der Haube, es hat mehr als nur drei Bytes dass seine Kopf komponieren, so zu sprechen, die ersten paar Bissen. Es sieht tatsächlich ein wenig auf den ersten Blick kompliziert. Und Sie werden diese in der P-Reihe zu sehen. Und immer etwas Insbesondere aus diesem jetzt ist nicht so wichtig, da nur die Tatsache, daß zu Beginn jedes Bitmap Datei, ein Grafikformat, es gibt eine ganze Reihe von Zahlen. Jetzt Microsoft, die Autor von diesem Format neigt dazu, diejenigen nennen Dinge nicht ints und chars und schwimmt aber Worte und d Worte und sehnt sich und Bytes. Also sie sind nur verschiedene Datentypen. Sie sind verschiedene Namen für die gleiche Sache. Aber Sie werden feststellen, dass in P Set Vier sehen. Aber das ist nur zu sagen, dass, wenn ein Mensch doppelklickt etwas BMP-Datei auf seinem oder ihre Festplatte, und ein Fenster öffnet sich bis ihm oder ihr, dass Bild, das zeigt, das passiert ist, weil das Betriebs System vermutlich aufgefallen, nicht nur die BMP-Datei-Erweiterung im Dateinamen, sondern auch die Tatsache, dass es einige Konvention mit dem Muster der Bits am Anfang dieser Bitmap-Datei. Aber lassen Sie uns jetzt konzentrieren sich auf eine so komplizierte Datei, sondern auf so etwas wie dieses. Nehmen wir hier in GEdit, ich einfach nur die Anfänge von einem Programm, das sehr einfach ist. Ich habe einige beinhaltet bis oben. Jetzt habe ich # include "structs.h" aber Ich werde in einem Moment zurückkommen. Aber das ist jetzt für sinnvoll. Also das ist ein Programm, das geht zu implementieren wie das Standes Datenbank. So eine Datenbank von Studenten, und jeder Schüler in der Welt hat einen Namen und ein Haus und wahrscheinlich einige andere Sachen, aber wir werden es einfach zu halten. Jeder Student hat einen Namen und ein Haus. Also, wenn ich wollte schreiben Programm, dessen Zweck im Leben wurde nur von laufen Null auf bis zu drei, wenn es drei Studenten an der Harvard University. Und ich möchte nur, um mit GetString, jedes Schülers Namen und Haus, und dann einfach ausdrucken diejenigen aus. Das ist ein bisschen wie Woche Eins, jetzt Woche zwei Sachen, wo ich will nur für Schleife oder so ähnlich. Und ich möchte GetString rufen ein paar mal, und drucken Sie dann f ein paar mal. Also, wie könnte ich das tun, obwohl, wenn sowohl ein Name und ein Haus werden für jeden Schüler beteiligt? Also mein erster Instinkt könnte sein, um so etwas zu tun. Ich könnte zunächst sagen, gut, gib mir, sagen, ein Array von Strings genannt Namen. Und ich glaube nicht, dass ein Hard drei hier. Was will ich, dort zu setzen? So dass die Schüler, denn das ist nur eine Konstante an der Spitze erklärt, nur damit ich nicht zu codieren drei in mehreren Orten. Auf diese Weise, kann ich es an einem Ort ändern, und es wirkt sich eine Veränderung überall. Und dann könnte ich tun, String beherbergt Studenten. Und jetzt, ich könnte etwas tun, wie for (int i = 0; i