# Cryptography

- [Encodings](https://book.jorianwoltjer.com/cryptography/encodings.md)
- [Ciphers](https://book.jorianwoltjer.com/cryptography/ciphers.md): Ways to encrypt text. Often methods used a long time ago to send secret messages
- [AES](https://book.jorianwoltjer.com/cryptography/aes.md): The Advanced Encryption Standard is a common symmetric encryption standard with a few different modes of operation
- [Asymmetric Encryption](https://book.jorianwoltjer.com/cryptography/asymmetric-encryption.md): Using Public and Private keys to securely transmit data in a way that only the recipients can decrypt it
- [RSA](https://book.jorianwoltjer.com/cryptography/asymmetric-encryption/rsa.md): An encryption standard using prime number factorization to encrypt and decrypt with an asymmetric keypair
- [Diffie-Hellman](https://book.jorianwoltjer.com/cryptography/asymmetric-encryption/diffie-hellman.md): The Diffie-Hellman Key Exchange uses asymmetric encryption to set up a shared secret for symmetric encryption
- [PGP / GPG](https://book.jorianwoltjer.com/cryptography/asymmetric-encryption/pgp-gpg.md): The "Pretty Good Privacy" asymmetric encryption scheme used in email and sending encrypted or signed messages
- [Pseudo-Random Number Generators (PRNG)](https://book.jorianwoltjer.com/cryptography/pseudo-random-number-generators-prng.md): Often the default random function in whatever language is not cryptographically secure, making it possible to predict values
- [Hashing](https://book.jorianwoltjer.com/cryptography/hashing.md): One-way functions that generate a unique hash of some data
- [Cracking Hashes](https://book.jorianwoltjer.com/cryptography/hashing/cracking-hashes.md): The point of hashes are that you can't reverse them, but we can sometimes find the original text by brute-forcing
- [Cracking Signatures](https://book.jorianwoltjer.com/cryptography/hashing/cracking-signatures.md): Some examples of signature implementations (often HMAC) that can be cracked using hashcat
- [XOR](https://book.jorianwoltjer.com/cryptography/xor.md): An operation between bits used often in cryptography
- [Custom Ciphers](https://book.jorianwoltjer.com/cryptography/custom-ciphers.md): "Never roll your own crypto" is a saying for a reason. It's hard to make a secure cryptographic algorithm because there are many ways it may be broken
- [Z3 Solver](https://book.jorianwoltjer.com/cryptography/custom-ciphers/z3-solver.md): The Z3 Theorem Prover can automatically solve puzzles in Python
- [Timing Attacks](https://book.jorianwoltjer.com/cryptography/timing-attacks.md): Using timing information to extract information
- [Blockchain](https://book.jorianwoltjer.com/cryptography/blockchain.md)
- [Smart Contracts](https://book.jorianwoltjer.com/cryptography/blockchain/smart-contracts.md): A few small bits about attacking Smart Contracts in Web3
- [Bitcoin addresses](https://book.jorianwoltjer.com/cryptography/blockchain/bitcoin-addresses.md): A bit of information about Bitcoin addresses


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.jorianwoltjer.com/cryptography.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
