From 87fa39dc4f4713ce0e5a464983f6e08f05b7298b Mon Sep 17 00:00:00 2001 From: Chinmay Rane Date: Wed, 25 Mar 2020 16:41:34 +0530 Subject: [PATCH] Added RSA Algorithm used in cryptography (#61) * Added RSA Algorithm * Update README.md * Create README.md * Update README.md * Add files via upload * Update README.md * Added RSA Algorithm Co-authored-by: Ayush Bhardwaj --- README.md | 1 + RSA_Algorithm/README.md | 25 +++++ RSA_Algorithm/RSA_Algorithm.png | Bin 0 -> 84014 bytes RSA_Algorithm/RSA_algorithm.py | 185 ++++++++++++++++++++++++++++++++ 4 files changed, 211 insertions(+) create mode 100644 RSA_Algorithm/README.md create mode 100644 RSA_Algorithm/RSA_Algorithm.png create mode 100644 RSA_Algorithm/RSA_algorithm.py diff --git a/README.md b/README.md index 5ee9cad..590bb4b 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ So far, the following projects have been integrated to this repo: |[Youtube video downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Youtube_Video_Downloader)|[Christopher He](https://github.com/hecris)| |[Zabbix API](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/zabbix_api)|[msg4sunny](https://github.com/msg4sunny)| |[Zip password cracker](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/zip_password_cracker)|[umar abdullahi](https://github.com/umarbrowser)| +|[RSA Algorithm](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/RSA_Algorithm)|[Chinmay Rane](https://github.com/Chinmayrane16) |[CLI Calculator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/cli_calculator)|[Willian GL](https://github.com/williangl) | |[Find PhoneNumber in String](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Find-PhoneNumber-in-String)|[Austin Zuniga](https://github.com/AustinZuniga)| |[IMDB TV Series Info Extractor](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/imdb_episode_ratings)|[Yash Raj Sarrof](https://github.com/yashYRS) | diff --git a/RSA_Algorithm/README.md b/RSA_Algorithm/README.md new file mode 100644 index 0000000..3f18585 --- /dev/null +++ b/RSA_Algorithm/README.md @@ -0,0 +1,25 @@ +# RSA Algorithm +* Python script that encrypts and decrypts a text based on [RSA algorithm](https://people.csail.mit.edu/rivest/Rsapaper.pdf) +* It involves the concept of modular arithmatic and euler's theorem. +* It is also based on the idea that factorizing large numbers requires years. +* Here, the (a,n) are kept public and (p,q,b) are kept private. + +![](https://github.com/Chinmayrane16/Awesome-Python-Scripts/blob/master/RSA_Algorithm/RSA_Algorithm.png) + +## Usage +For Windows users: + +```bash +$ python RSA_Algorithm.py +``` + +For Mac/Linux/Unix users: + +```bash +$ ./RSA_Algorithm.py +``` + +## References +[Blog](https://www.di-mgt.com.au/rsa_alg.html)
+[Paper](https://people.csail.mit.edu/rivest/Rsapaper.pdf)
+[Video](https://www.youtube.com/watch?v=wXB-V_Keiu8) diff --git a/RSA_Algorithm/RSA_Algorithm.png b/RSA_Algorithm/RSA_Algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb8e22f2a84cc653a59105aecf303dc2827a457 GIT binary patch literal 84014 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 literal 0 HcmV?d00001 diff --git a/RSA_Algorithm/RSA_algorithm.py b/RSA_Algorithm/RSA_algorithm.py new file mode 100644 index 0000000..3a23b83 --- /dev/null +++ b/RSA_Algorithm/RSA_algorithm.py @@ -0,0 +1,185 @@ +""" +For more information on the algorithm, refer the following links: + +https://www.di-mgt.com.au/rsa_alg.html +https://people.csail.mit.edu/rivest/Rsapaper.pdf +https://www.youtube.com/watch?v=wXB-V_Keiu8 + +""" + + +def isPrime(n): + prime = [True for i in range(n+1)] + p = 2 + while p*p<=n: + if prime[p]==True: + for i in range(p*p,n+1,p): + prime[i]=False + p+=1 + + return prime[n] + + +def gcd(a,b): + while b!=0: + r = a%b + a=b + b=r + return a + +def Multiplicative_inverse(a,b): + s1 = 1 + s2 = 0 + m = b + while b!=0: + q=a//b + r=a%b + a=b + b=r + s=s1-q*s2 + s1=s2 + s2=s + + if s1<0: + s1+=m + + return s1 + +def powermod(x,y,p): + res = 1 + + x = x%p + while (y>0): + + if (y%2) == 1: + res = (res*x)%p + + y = y//2 + x = (x*x)%p + + return res + +if __name__ == '__main__': + while (True): + res = input('Do you want to enter prime numbers (y) or let the algorithm do it for you (n) or exit (e)? (y/n/e): ') + if res == 'y': + while True: + p = 13 + p = int(input('Enter a prime number: ')) + if isPrime(p): + break + else: + print(p,'is not a prime number') + continue + + while True: + q = 17 + q = int(input('Enter a different prime number: ')) + if isPrime(q) and (p*q>26): + break + else: + print('Both the prime numbers are same!! or product of both the prime numbers is less than 26!!') + continue + + n = p*q + phi_n = (p-1)*(q-1) + a = 19 + while True: + a = int(input('Enter a number such that Greatest Common Divisor of that number with '+ str(phi_n) + ' is 1: ')) + if gcd(a,phi_n)!=1: + continue + else: + break + + b = Multiplicative_inverse(a,phi_n) + message = input('Enter the message to be encrypted (lower case): ') + message = message.lower() + + encrypted_string = "" + encrypted_num = [] + + for i in range(len(message)): + ch = message[i] + if ch!=' ': + m = ord(ch) - 97 + e = powermod(m,a,n) + encrypted_num.append(e) + encrypted_string += chr(e%26 + 97) + else: + encrypted_string +=' ' + + print('Encrypted message is:', encrypted_string) + print(encrypted_num) + res = input("Do you want to decrypt it too? (y/n): ") + if res == 'y': + decrypted = '' + j=0 + for i in range(len(encrypted_string)): + ch = message[i] + if ch != ' ': + e = encrypted_num[j] + m = powermod(e,b,n) + ch = chr(m+97) + decrypted+=ch + j+=1 + else: + decrypted+=' ' + + print("Decrypted message is:",decrypted) + else: + ans = input("Do you want to continue? (y/n): ") + if ans == 'y': + continue + else: + break + + elif res == 'n': + p = 13 + q = 17 + n = p*q + a = 5 + b = 77 + message = input('Enter the message to be encrypted (lower case): ') + message = message.lower() + + encrypted_string = "" + encrypted_num = [] + + for i in range(len(message)): + ch = message[i] + if ch!=' ': + m = ord(ch) - 97 + e = powermod(m,a,n) + encrypted_num.append(e) + encrypted_string += chr(e%26 + 97) + else: + encrypted_string +=' ' + + print('Encrypted message is:', encrypted_string) + res = input("Do you want to decrypt it too? (y/n): ") + if res == 'y': + decrypted = '' + j=0 + for i in range(len(encrypted_string)): + ch = encrypted_string[i] + if ch != ' ': + e = encrypted_num[j] + m = powermod(e,b,n) + ch = chr(m+97) + decrypted+=ch + j+=1 + else: + decrypted+=' ' + + print("Decrypted message is:",decrypted) + else: + ans = input("Do you want to continue? (y/n): ") + if ans == 'y': + continue + else: + break + elif res == 'e': + break + else: + print('Invalid command!') + continue