# Python Hashlib Module

The `hashlib` module implements a common interface to many different secure hash and message digest algorithms. Included are the FIPS secure hash algorithms SHA1, SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA’s MD5 algorithm (defined in Internet RFC 1321).

## Importing the Module

```python
import hashlib
```

## Available Algorithms

You can check which algorithms are guaranteed to be supported by the module on all platforms, and which are available in the running Python interpreter.

```python
import hashlib

print(hashlib.algorithms_guaranteed)
print(hashlib.algorithms_available)
```

## Creating Hash Objects

To create a hash of a byte string, you can use the constructor functions like `sha256()`, `md5()`, etc.

```python
import hashlib

# Create a SHA-256 hash object
m = hashlib.sha256()
```

## Updating the Hash

You can update the hash object with bytes-like objects using the `update()` method. Repeated calls are equivalent to a single call with the concatenation of all the arguments.

```python
m.update(b"Hello")
m.update(b" World")
```

## Getting the Digest

### `digest()`

Returns the digest of the data passed to the `update()` method so far. This is a bytes object of size `digest_size`.

```python
print(m.digest())
```

### `hexdigest()`

Like `digest()` except the digest is returned as a string object of double length, containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments.

```python
print(m.hexdigest())
```

## Concise Usage

You can also pass the data directly to the constructor.

```python
import hashlib

print(hashlib.sha256(b"Hello World").hexdigest())
```

## Using `new()`

A generic constructor `new(name, data=b'')` is also available.

```python
h = hashlib.new('sha256')
h.update(b"Nobody inspects")
h.update(b" the spammish repetition")
print(h.hexdigest())
```

[[programming/python/python]]