Search This Blog

Friday, April 4, 2025

RSA best explanation

Encrypting "hello"
Let's encrypt something like "hello" using RSA.

Step 1: Convert "hello" to a number
We use a basic scheme like ASCII:

python
CopyEdit
"hello" → [104, 101, 108, 108, 111]  # ASCII codes
Let's just take the number 104 (which is 'h') to walk through the encryption.

Step 2: Encrypt with public key (e, n)
The encrypted value c is:

python
CopyEdit
c = (m ** e) % n
Where:

m is the plaintext number (e.g. 104)

e and n are from the public key

๐Ÿ’ก This works because exponentiation and modulo math are easy to compute in one direction but hard to reverse without the private key.

๐Ÿ”“ Decryption
To decrypt the ciphertext c, you use the private key (d, n):

python
CopyEdit
m = (c ** d) % n
This brings back the original number m (like 104), which you then convert back to a character: 'h'.

๐Ÿงฌ Can you see the pattern between public and private keys?
Yes, kind of.

Both share n

e and d are modular inverses with respect to ฯ†(n)

You cannot see p and q directly from n, unless you factor it (which is very hard if n is 2048-bit+)

So while there's a mathematical relationship, it's computationally infeasible to reverse-engineer d from e and n without factoring n.

๐Ÿ” Full Flow Summary
plaintext
CopyEdit
1. Sender encrypts with public key:    c = (m^e) mod n
2. Receiver decrypts with private key: m = (c^d) mod n
๐Ÿงช Code Example (Python - Using small primes for demo)
python
CopyEdit
# Super simple demo, not secure primes
p = 61
q = 53
n = p * q                # 3233
phi = (p - 1) * (q - 1)  # 3120

e = 17  # Chosen as public exponent
# Find d such that (d * e) % phi == 1
def modinv(e, phi):
    for d in range(1, phi):
        if (d * e) % phi == 1:
            return d
    return None

d = modinv(e, phi)

# Encrypt a character (say 'h' = 104)
m = 104
c = pow(m, e, n)
print("Encrypted:", c)  # ciphertext

# Decrypt
decrypted = pow(c, d, n)
print("Decrypted:", chr(decrypted))  # back to 'h'
๐Ÿ” Why Is RSA So Powerful?
Easy to encrypt with a public key.

Only someone with the private key can decrypt.

Secure even if everyone knows your public key.

Based on hard math (factoring large primes).

No comments:

Post a Comment