- All
- Engineering
- Computer Science
Powered by AI and the LinkedIn community
1
Generate keys
2
Encrypt message
3
Decrypt message
4
Test code
5
Advantages and disadvantages
6
Further reading
Be the first to add your personal experience
7
Here’s what else to consider
Be the first to add your personal experience
The RSA algorithm is one of the most widely used methods for encryption and digital signatures in computer security and cryptography. It is based on the mathematical concept of modular exponentiation, which allows you to generate and use large prime numbers as keys. In this article, you will learn how to implement the RSA algorithm in Python using some built-in modules and functions.
Top experts in this article
Selected by the community from 15 contributions. Learn more
Earn a Community Top Voice badge
Add to collaborative articles to get recognized for your expertise on your profile. Learn more
- Asad Ullah Dogar AI Contributor | Building AI Solutions with Data Science
1
-
1
- Munish Sawhney Lead Technical Specialist | Developing Scalable Solutions
1
1 Generate keys
In order to implement the RSA algorithm in Python, you must first generate a pair of public and private keys. The public key consists of two numbers, n and e, while the private key consists of one number, d. To do this, you must import the random and math modules and define functions to check if a number is prime using the Miller-Rabin test, find the greatest common divisor (GCD) of two numbers using the Euclidean algorithm, and find the multiplicative inverse of a number modulo another number using the extended Euclidean algorithm. Next, you must choose two large random prime numbers p and q, compute n as the product of p and q, compute phi as the product of (p-1) and (q-1), choose a random number e such that 1 < e < phi and GCD(e, phi) = 1, compute d as the multiplicative inverse of e modulo phi, and finally return (n, e) as the public key and (n, d) as the private key.
Help others by sharing more (125 characters min.)
- Asad Ullah Dogar AI Contributor | Building AI Solutions with Data Science
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Key generation:Generate two large prime numbers, p and q.Calculate n = p * q.Compute Euler's totient function, phi(n) = (p - 1) * (q - 1).Choose a public exponent e such that 1 < e < phi(n) and gcd(e, phi(n)) = 1 (greatest common divisor of e and phi(n) is 1).Calculate the private exponent d using the extended Euclidean algorithm such that d * e ≡ 1 (mod phi(n)).
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Choose Two Large Prime Numbers (p and q): The first step is to select two large prime numbers, p and q. Compute n and φ (phi): Calculate the product of p and q to obtain n (n = p * q). Also, compute φ (phi), Euler's totient function, which is the product of (p-1) and (q-1).Choose Public Exponent (e): Select a random number e such that 1 < e < φ and the greatest common divisor (GCD) of e and φ is 1. Compute Private Exponent (d): Find the modular multiplicative inverse of e modulo φ. In other words, determine d such that (d * e) % φ = 1. This d becomes part of the private key.Public Key (n, e) and Private Key (n, d): The public key consists of the modulus n and the public exponent e.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
- Munish Sawhney Lead Technical Specialist | Developing Scalable Solutions
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
To implement RSA in Python: Generate large prime numbers p and q. Compute n = p*q and Euler's totient function φ(n). Choose e such that 1 < e < φ(n) and gcd(e, φ(n)) = 1. Compute d such that (d * e) % φ(n) = 1. Public key is (n, e), private key is (n, d). Encrypt plaintext m with ciphertext c = m^e mod n. Decrypt ciphertext c with plaintext m = c^d mod n. Use Python libraries like random, math, and pow for calculations.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
(edited)
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
To generate RSA keys in Python is really simple.First, install PyCryptodome package if you have not already using 'pip install pycryptodome' and assuming you do not have any conflicting crypto package pre-installed.Here is the simple Python code to generate RSA 2048-bit keys and display them:from Crypto.PublicKey import RSAkey = RSA.generate(2048)private_key = key.export_key()public_key = key.publickey().export_key()print("RSA 2048 Private Key: ", private_key.decode("utf-8"))print("RSA 2048 Public Key: ", public_key.decode("utf-8"))
LikeLike
Celebrate
Support
Love
Insightful
Funny
- Deepak Kumar Entrepreneur | Co-Founder @Stealth Starup | Data Analyst | Web Developer | SaaS Innovator | Al Enthusiast | IIT Patna
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
To generate RSA keys, you can use the following Python code:import randomdef is_prime(n,k=5):r,d=0,n-1;exec("a=random.randint(2,n-2);x=pow(a,d,n);"+\"if x==1or x==n-1:0;"+\"for _ in range(r-1):x=pow(x,2,n);if x==n-1:break;else:return 0;"*k);return 1def g(a,b):while b:a,b=b,a%b;return adef e(a,b):g,x,y=a,0,1;exec("g,x,y=b,x-(a//b)*y,y;a,b=b,a%b;"*2);return g,x,ydef m(a,b):g,x,_=e(a,b);if g!=1:raise ValueError;return x%bdef k(b):def r():return random.getrandbits(b);p,q=r(),r();n,e=p*q,65537;f=(p-1)*(q-1);d=m(e,f);return(n,e),(n,d)b=2048;p,k=k(b);print("Public Key:",p,"\nPrivate Key:",k)
LikeLike
Celebrate
Support
Love
Insightful
Funny
2 Encrypt message
The second step to implement the RSA algorithm in Python is to encrypt a message using the public key. Any string of characters can be used as a message, however, it needs to be converted into a number before encryption. To do so, you must import the binascii module and define functions for converting a string into a hexadecimal number using the binascii.hexlify() function and converting a hexadecimal number into a string using the binascii.unhexlify() function. Additionally, you need to define a function to perform modular exponentiation using the pow() function. Once completed, convert the message into a hexadecimal number m and encrypt it using the public key (n, e) by computing c = pow(m, e, n). Finally, convert c into a hexadecimal string and return it.
Help others by sharing more (125 characters min.)
- Asad Ullah Dogar AI Contributor | Building AI Solutions with Data Science
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Encryption:Convert the message (plaintext) to a numerical representation (e.g., ASCII values).Break the message into blocks smaller than n.For each block m:ciphertext = m**e % n
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Convert Message to Number: The original message, typically a string of characters, is first converted into a numerical format. This conversion is necessary for mathematical operations involved in RSA encryption. The conversion often involves representing the characters in their hexadecimal form.Perform Modular Exponentiation: The conversion result is raised to the power of the public exponent (e) modulo the modulus (n), as given by �≡��(mod�)c≡m e (modn). Here, 'm' is the numerical representation of the message, 'e' is the public exponent, and 'n' is the modulus from the recipient's public key.Hexadecimal Conversion: The result of the modular exponentiation, 'c', is typically represented in hexadecimal form.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Encrypting messages using RSA Algorithm in Python is really simple too!First, install PyCryptodome package if you have not already using 'pip install pycryptodome' and assuming you do not have any conflicting crypto package pre-installed.Here is the simple Python code to encrypt the cleartext message using RSA public keys 'public.pem' and display them:from Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_OAEPimport binasciipublic_key = RSA.import_key(open('public.pem').read())cipher = PKCS1_OAEP.new(public_key)cleartext = b'Here is my secret message to you.'encrypted_message = cipher.encrypt(cleartext)print(f"Cleartext: {cleartext}")print(f"Encrypted: {encrypted_message}")
LikeLike
Celebrate
Support
Love
Insightful
Funny
3 Decrypt message
The third step to implement the RSA algorithm in Python is to decrypt a message using the private key. This message is a hexadecimal string that must be converted into a number before decryption. To do this, you must import the binascii module and define functions for converting a string to a hexadecimal number with the binascii.hexlify() function, and converting a hexadecimal number to a string with the binascii.unhexlify() function. Additionally, you need to define a function for modular exponentiation using the pow() function. After converting the message to a hexadecimal number c, you can decrypt it by computing m = pow(c, d, n), where n and d are the private key values. Finally, convert m into a string and return it.
Help others by sharing more (125 characters min.)
- Asad Ullah Dogar AI Contributor | Building AI Solutions with Data Science
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Decryption:For each ciphertext block c:plaintext = c**d % nConvert the numerical representation back to the original message.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Convert Hexadecimal Message to Number: The received encrypted message, typically in the form of a hexadecimal string, is converted into a numerical format. This involves reversing the hexadecimal representation using functions like binascii.unhexlify() to obtain the numerical representation 'c'.Perform Modular Exponentiation: The numerical representation 'c' is raised to the power of the private exponent (d) modulo the modulus (n) (modn). Here, 'm' is the decrypted numerical representation of the original message, 'd' is the private exponent, and 'n' is the modulus from the recipient's private key.Convert Number to String: The resulting numerical representation 'm' is converted back into its original string format.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Finally, decrypting RSA encrypted messages is also really simple too!Add the following code to my code in #2 Encrypt message using your RSA private key 'private.pem':private_key = RSA.import_key(open('private.pem').read())cipher = PKCS1_OAEP.new(private_key)decrypted_message = cipher.decrypt(encrypted_message)print(f"Decrypted: {decrypted_message}")
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
4 Test code
Testing the code for the RSA algorithm in Python requires following a few steps. Firstly, you must import the rsa module that contains the functions defined above. Subsequently, generate a pair of keys using the rsa.generate_keys() function and print them. Afterward, choose a message and print it. Then, encrypt the message using the rsa.encrypt() function and the public key, and print the encrypted message. Finally, decrypt the encrypted message using the rsa.decrypt() function and the private key, and print the decrypted message to compare it with the original. Make sure that you use valid keys and that your message is not too long.
Help others by sharing more (125 characters min.)
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Import the RSA Module:Begin by importing the module containing the RSA functions. Generate Key Pair:Utilize the rsa.generate_keypair() function to generate a pair of public and private keys. Print and observe these keys to ensure they are valid.Choose and Print the Message:Select a message that you will use for testing. Print this message to verify its correctness.Encrypt the Message:Use the rsa.encrypt() function to encrypt the chosen message with the generated public key. Print the encrypted message.Decrypt the Message:Decrypt the encrypted message using the rsa.decrypt() function and the private key.Compare Original and Decrypted Messages:Ensure that the decrypted message matches the original message.
LikeLike
Celebrate
Support
Love
Insightful
Funny
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Adding all the python code shared in #1 Generate Keys, #2 Encrypt Message and #3 Decrypt Message, you can now test the key generation, message encryption and decryption.You can also generate RSA keys between you and your friend, and exchange your public keys. With this code, you can now securely share messages between both of you.I would also recommend to share your public key in your email signature so that people can send you encrypted content which only you can decrypt and view.
LikeLike
Celebrate
Support
Love
Insightful
Funny
5 Advantages and disadvantages
The fifth step to implement the RSA algorithm in Python is to discuss some of the advantages and disadvantages of this method. The RSA algorithm has some benefits, such as being easy to understand and implement, secure and robust against brute force attacks, allowing for public key encryption and digital signatures, and being compatible with many protocols and standards. However, it also has some drawbacks like being slow and computationally intensive, requiring large keys and messages, vulnerable to some mathematical attacks, and not suitable for encrypting large amounts of data.
Help others by sharing more (125 characters min.)
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Ease of Understanding and Implementation:One of the primary strengths of RSA is its conceptual simplicity. The algorithm is relatively easy to understand and implement, making it accessible to a broad audience.Security and Resistance to Brute Force Attacks:RSA is known for its security, especially against brute force attacks. The difficulty of factoring large numbers contributes to the algorithm's robustness, as breaking RSA encryption requires the ability to factor the product of two large prime numbers.Public Key Encryption and Digital Signatures:RSA supports public key encryption, enabling secure communication without a need for both parties to share a secret key.
LikeLike
Celebrate
Support
Love
Insightful
Funny
-
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
The biggest advantage to using Python to generate RSA cryptography are:- Python's syntax is clear and readable, making cryptographic algorithms easier to implement, understand and audit.- Python has a strong ecosystem of cryptographic libraries (e.g., PyCryptodome, cryptography) that provide well-tested and optimized implementations of RSA and other algorithms.The biggest disadvantage is performance. Python is an interpreted language and generally does not offer the same level of performance as compiled languages like C or C++ for computationally intensive tasks such as RSA operations.When performance is critical, use Python libraries that wrap optimized C/C++ implementations.
LikeLike
Celebrate
Support
Love
Insightful
Funny
6 Further reading
The sixth step to implement the RSA algorithm in Python is to provide some resources for further reading. If you want to gain a deeper understanding of RSA and its applications, you can look into the original paper by Rivest, Shamir, and Adleman that introduced the algorithm. Additionally, you can explore the Wikipedia article on RSA to find out more about its history, theory, and implementation. Furthermore, you can reference the Python documentation on the random, math, and binascii modules that are used in the code. Lastly, you may find it beneficial to take on the CryptoPals challenges which are designed to help improve your cryptography skills.
Help others by sharing more (125 characters min.)
7 Here’s what else to consider
This is a space to share examples, stories, or insights that don’t fit into any of the previous sections. What else would you like to add?
Help others by sharing more (125 characters min.)
Computer Science
Computer Science
+ Follow
Rate this article
We created this article with the help of AI. What do you think of it?
It’s great It’s not so great
Thanks for your feedback
Your feedback is private. Like or react to bring the conversation to your network.
Tell us more
Tell us why you didn’t like this article.
If you think something in this article goes against our Professional Community Policies, please let us know.
We appreciate you letting us know. Though we’re unable to respond directly, your feedback helps us improve this experience for everyone.
If you think this goes against our Professional Community Policies, please let us know.
More articles on Computer Science
No more previous content
- You're facing conflicting feedback in a code review. How do you ensure your final product meets expectations?
- You're facing technical challenges in an Agile software project. How do you navigate delays effectively?
- Here's how you can effectively communicate deadline expectations with team members for project completion.
- Balancing networking events and project milestones in a tech startup: Can you excel in both worlds?
- You're faced with urgent software bugs and looming feature deadlines. How do you effectively manage both? 4 contributions
- Your team is struggling with varying internet speeds. How can you ensure effective collaboration? 4 contributions
- You're facing legacy software security risks. How do you ensure data privacy remains intact? 5 contributions
- Your critical systems are down. How do you decide which task to tackle first? 2 contributions
No more next content
Explore Other Skills
- Programming
- Web Development
- Agile Methodologies
- Machine Learning
- Software Development
- Data Engineering
- Data Analytics
- Data Science
- Artificial Intelligence (AI)
- Cloud Computing
More relevant reading
- Algorithms How can you implement a trial division algorithm for integer factorization?
- Cybersecurity What strategies can you employ to encrypt sensitive data in Python?
- Programming What is the Python code for implementing a priority queue?
- Software Development How do you manage memory efficiently when using Python for embedded devices?