This is a hands-on introductory security course for upper-level undergraduate students and graduate students. Students will learn the basics of cryptography and methods for protecting systems from attack. We will cover malicious software and other attacks that occur over the network, as well as the perimeter defenses used to stop these attacks. Students will then learn about program vulnerabilities that lead to most of the security problems in computing today. We will conclude with the other administrative issues that security professionals must consider in their jobs.