#### Overview of this book

Cryptography is essential for protecting sensitive information, but it is often performed inadequately or incorrectly. Hands-On Cryptography with Python starts by showing you how to encrypt and evaluate your data. The book will then walk you through various data encryption methods,such as obfuscation, hashing, and strong encryption, and will show how you can attack cryptographic systems. You will learn how to create hashes, crack them, and will understand why they are so different from each other. In the concluding chapters, you will use three NIST-recommended systems: the Advanced Encryption Standard (AES), the Secure Hash Algorithm (SHA), and the Rivest-Shamir-Adleman (RSA). By the end of this book, you will be able to deal with common errors in encryption.
Title Page
Packt Upsell
Contributor
Preface
Free Chapter
Obfuscation
Hashing
Strong Encryption
Other Books You May Enjoy
Index

## Challenge – cracking RSA with similar factors

In this section, we will cover topics such as large integers–in Python and the `decimal` library. We will also take a look at an example of factoring a large number and then two challenges for you to solve.

### Large integers in Python

Python can do multiplication and division–and a contented multiplication and division of arbitrarily large integers with complete precision:

If we have `1001` and then we calculate `1001` squared, we get the right answer, of course; and even if we take a number like `10**100 + 1`, it correctly gets that number a hundred places with a `1` at each end. Now, if we square that number, it again gets it correct, all the way to the one at each end.

So, for simple integer operations, Python's precision is unlimited. However, if we want to square root, we need to import a `math` library:

The `math` library does not keep any arbitrary number of places, as you can see in the preceding code. If we take `10 **100 + 1` and square it, then take the square...