Sascha Schulz
2024-09-16 179755d7782c2ef18fb19b30dda0a538bfb5823e
add crypto and zlib chapters
1 Dateien geändert
71 ■■■■■ Geänderte Dateien
index.html 71 ●●●●● Patch | Ansicht | Raw | Blame | Historie
index.html
@@ -4239,6 +4239,77 @@
                            </code>
                        </pre>
                    </section>
                    <section>
                        <h3>Kryptographie</h3>
                    </section>
                    <section>
                        Mithilfe des nativen <code>crypto</code>-Moduls ist es möglich, moderne sichere kryptografische Verfahren zu verwenden:
                        <pre>
                            <code class="js" data-trim data-line-numbers>
                                const crypto = require("crypto");
                            </code>
                        </pre>
                        Hierzu nutzt NodeJS selber die weit verbreitete OpenSSL-Bibliothek
                    </section>
                    <section>
                        Einen MD5-Hash erzeugen:
                        <pre>
                            <code class="js" data-trim data-line-numbers>
                                const crypto = require("crypto");
                                const hash = crypto.createHash("md5");
                                const md5 = hash.update("abcdefg")
                                    .digest(); // Buffer (default)
                                    // .digest("hex") // Hexadezimal
                                    // .digest("utf8") // Bytes forciert als Chars
                                console.log(md5);
                            </code>
                        </pre>
                    </section>
                    <section>
                        <p>Aufgabe</p>
                        <p>Erzeuge jeweils den md5- und den sha256-Hash als Hex-Wert der beiden Texte in der Datei <code>text-examples.txt</code> und vergleiche jeweils ihren md5- und sha256-Hash miteinander</p>
                    </section>
                    <section>
                        <h3>Zippen</h3>
                    </section>
                    <section>
                        Mit dem nativen Modul <code>zlib</code> ist es möglich, Kompression in seinen Anwendungen zu nutzen.
                        <pre>
                            <code class="js" data-trim data-line-numbers>
                                const zlib = require("zlib");
                                // Komprimieren
                                zlib.deflate("abc" /* buffer | string */, (err, compressed) => {});
                                // Dekomprimieren
                                zlib.inflate(compressed /* buffer */, (err, decompressed) => {});
                                // Als Stream
                                const zipper = zlib.createDeflate();
                                const unzipper = zlib.createInflate();
                                source.pipe(zipper).pipe(target);
                                source.pipe(unzipper).pipe(target);
                            </code>
                        </pre>
                    </section>
                    <section>
                        <p>Aufgabe</p>
                        <p>Nutze die einfachen Varianten <code>zlib.deflate</code> und <code>zlib.inflate</code>, um einen beliebigen Text zu komprimieren und anschließend wieder zu dekomprimieren</p>
                    </section>
                    <section>
                        <p>Aufgabe</p>
                        <p>Nutze die Stream-Varianten <code>zlib.createDeflate</code> und <code>zlib.createInflate</code>, um jeweils ein getrenntes Programm für die Kompression und Dekompression mit <code>process.stdin</code> und <code>process.stdout</code> zu machen, sodass in der Konsole folgende Nutzung möglich ist:</p>
                        <pre>
                            <code class="bash" data-trim data-line-numbers>
                                echo "abc" | node compress.js | node decompress.js
                                cat file.txt | node compress.js > file.zipped
                                cat file.zipped | node decompress.js > file.txt
                            </code>
                        </pre>
                    </section>
                </section>
            </div>
        </div>