Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RSA #2395

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

RSA #2395

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions rsa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import binascii

keyPair = RSA.generate(1024)
pubKey = keyPair.public_key()
print(f"Public Key: (n={hex(pubKey.n)},e={hex(pubKey.e)})")
pubKeyPEM = pubKey.exportKey()
print(pubKeyPEM.decode('ascii'))

print(f"Private Key: (n={hex(pubKey.n)},e={hex(keyPair.d)})")
privKeyPEM = keyPair.exportKey()
print(privKeyPEM.decode('ascii'))

msg = b"SIES Nerul"
msg = msg.encode("utf-8")
encryptor = PKCS1_OAEP(pubKey)
encrypted = encryptor.encrypt(msg)
print("Encrypted: ",binascii.hexlify(encrypted))
33 changes: 33 additions & 0 deletions rsa2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import math
def gcd(a,h):
temp = 0
while(1):
temp = a%h
if(temp==0):
return h
a=h
h=temp
p=3
q=7
n=p*q
e=2
phi=(p-1)*(q-1)

while (e<phi):
if(gcd(e,phi)==1):
break
else:
e+=1

k=2
d = (1+(k*phi))/e
msg = 12.0
print("Message Data = ",msg)

c = pow(msg,e)
c = math.fmod(c,n)
print("Encrypted Data = ",c)

m = pow(c,d)
m = math.fmod(m,n)
print("Original Message sent = ",m)
93 changes: 93 additions & 0 deletions rsa3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import random
import math

prime = set()
public_key = None
private_key = None
n = None

def primefiller():
seive = [True]*250
seive[0]=False
seive[1]=False
for i in range(2,250):
for j in range(i*2,250,i):
seive[j]=False

for i in range(len(seive)):
if seive[i]:
prime.add(i)

def pickrandomprime():
global prime
k = random.randint(0,len(prime)-1)
it=iter(prime)
for _ in range(k):
next(it)

ret = next(it)
prime.remove(ret)
return ret

def setkeys():
global public_key,private_key,n
prime1 = pickrandomprime()
prime2 = pickrandomprime()
n = prime1*prime2
fi = (prime1-1)*(prime2-1)
e=2
while True:
if math.gcd(e,fi)==1:
break
e+=1
public_key=e
d=2
while True:
if (d*e)%fi==1:
break
d+=1
private_key=d

def encrypt(message):
global public_key,n
e = public_key
encrypted_text=1
while e>0:
encrypted_text *= message
encrypted_text %=n
e-=1
return encrypted_text

def decrypt(encrypted_text):
global private_key,n
d = private_key
decrypted=1
while d>0:
decrypted *= encrypted_text
decrypted %=n
d-=1
return decrypted

def encoder(message):
encoded = []
for letter in message:
encoded.append(encrypt(ord(letter)))
return encoded

def decoder(encoded):
s=''
for num in encoded:
s+=chr(decrypt(num))
return s

if __name__=="__main__":
primefiller()
setkeys()
message = "Shubham"
coded = encoder(message)
print("Initial Message")
print(message)
print("The encoded message encrypted by public key:")
print(''.join(str(p) for p in coded))
print("The decoded message decrypted by public key:")
print(''.join(str(p) for p in decoder(coded)))