Question

IN PYTHON 1. Generate valid keys (e, n) for the RSA cryptosystem. 2. Use the sieve...

IN PYTHON

1. Generate valid keys (e, n) for the RSA cryptosystem.
2. Use the sieve of Eratosthenes to find all primes less than 10,000.
3. Find all of the positive divisors of a positive integer from its prime factorization.

Homework Answers

Answer #1

1. The solution as per the requirement is given in the code snippet block below:

# Module Cryptomath:
def gcd(a, b):
    while a != 0:
        a, b = b % a, a
    return b

def findModInverse(a, m):
    if gcd(a, m) != 1:
        return None
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m

    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m
# ------------------------------------------------------------------------------------------------
# Module rabinMiller
import random
def rabinMiller(num):
   s = num - 1
   t = 0
   
   while s % 2 == 0:
      s = s // 2
      t += 1
   for trials in range(5):
      a = random.randrange(2, num - 1)
      v = pow(a, s, num)
      if v != 1:
         i = 0
         while v != (num - 1):
            if i == t - 1:
               return False
            else:
               i = i + 1
               v = (v ** 2) % num
      return True

def isPrime(num):
    if (num < 2):
        return False
    lowPrimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,317, 331, 337, 347, 349, 
        353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 
        797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
        
    if num in lowPrimes:
        return True
    for prime in lowPrimes:
        if (num % prime == 0):
            return False
    return rabinMiller(num)
def generateLargePrime(keysize = 1024):
    while True:
        num = random.randrange(2**(keysize-1), 2**(keysize))
        if isPrime(num):
            return num

# ------------------------------------------------------------------------------------------------

import random, sys, os, rabinMiller, cryptomath

def generateKey(keySize):
    # Step 1: Create two prime numbers, p and q. Calculate n = p * q.
    print('Generating p prime...')
    p = rabinMiller.generateLargePrime(keySize)
    print('Generating q prime...')
    q = rabinMiller.generateLargePrime(keySize)
    n = p * q
        
    # Step 2: Create a number e that is relatively prime to (p-1)*(q-1).
    print('Generating e that is relatively prime to (p-1)*(q-1)...')
    while True:
        e = random.randrange(2 ** (keySize - 1), 2 ** (keySize))
        if cryptomath.gcd(e, (p - 1) * (q - 1)) == 1:
            break
   
    # Step 3: Calculate d, the mod inverse of e.
    print('Calculating d that is mod inverse of e...')
    d = cryptomath.findModInverse(e, (p - 1) * (q - 1))
    publicKey = (n, e)
    privateKey = (n, d)
    print('Public key:', publicKey)
    print('Private key:', privateKey)
    return (publicKey, privateKey)

2. The sieve of Eratosthenes to find all primes less than 10,000. In the code snippet given below, we have enabled the user to input the number upto which the prime numbers are to be found. The output attached has the value of n = 30.

# Python program to print all primes smaller than or equal to 
# n using Sieve of Eratosthenes 
  
def SieveOfEratosthenes(n): 
      
    # Create a boolean array "prime[0..n]" and initialize 
    #  all entries it as true. A value in prime[i] will 
    # finally be false if i is Not a prime, else true. 
    prime = [True for i in range(n+1)] 
    p = 2
    while (p * p <= n):  
        # If prime[p] is not changed, then it is a prime 
        if (prime[p] == True): 
            # Update all multiples of p 
            for i in range(p * p, n+1, p): 
                prime[i] = False
        p += 1

    # Print all prime numbers 
    for p in range(2, n+1): 
        if prime[p]: 
            print(p, end = " ") 
  
# driver program 
if __name__=='__main__': 
    n = int(input())   # change this and type 10000 to get your desired output
    print("Following are the prime numbers smaller than or equal to", n)
    SieveOfEratosthenes(n) 

Output:

3. Python program to find all of the positive divisors of a positive integer from its prime factorization:

# Recursive function to generate all the  
# divisors from the prime factors  
def generateDivisors(curIndex, curDivisor, arr): 
      
    # Base case i.e. we do not have more  
    # primeFactors to include  
    if (curIndex == len(arr)): 
        print(curDivisor, end = ' ') 
        return
      
    for i in range(arr[curIndex][0] + 1): 
        generateDivisors(curIndex + 1, curDivisor, arr)  
        curDivisor *= arr[curIndex][1] 
      
# Function to find the divisors of n  
def findDivisors(n): 
      
    # To store the prime factors along  
    # with their highest power  
    arr = [] 
      
    # Finding prime factorization of n  
    i = 2
    while(i * i <= n): 
        if (n % i == 0): 
            count = 0
            while (n % i == 0): 
                n //= i  
                count += 1
                  
            # For every prime factor we are storing  
            # count of it's occurenceand itself.  
            arr.append([count, i])  
      
    # If n is prime  
    if (n > 1): 
        arr.append([1, n])  
      
    curIndex = 0
    curDivisor = 1
      
    # Generate all the divisors  
    generateDivisors(curIndex, curDivisor, arr)  
  
# Driver code  
n = int(input("Enter the positive number: "))
findDivisors(n)  

Output:

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions
Consider the RSA algorithm with n=33 and E=7. 1. Encode the message 8. 2. Find the...
Consider the RSA algorithm with n=33 and E=7. 1. Encode the message 8. 2. Find the value of D. 3. Decode the message 9. Consider the RSA algorithm with n=65 and E=5. 4. Encode the message 8. 5. Find the value of D. 6. Decode the message 2.
Below is an example of key generation, encryption, and decryption using RSA. For the examples below,...
Below is an example of key generation, encryption, and decryption using RSA. For the examples below, fill in the blanks to indicate what each part is or answer the question. Public key is (23, 11) What is 23 called? _______________, What is 11 called?_______________ Private key is (23, 13) What is 23 called?_______________, What is 13 called?_______________ 23 can be part of the public key because it is very hard to _______________ large prime numbers. ENCRYPT (m) = m^e mod...
use mathematica Find number a, a is positive integer and a<2000, such that f(n) =n^2-79n +a...
use mathematica Find number a, a is positive integer and a<2000, such that f(n) =n^2-79n +a is prime numbers for all n on [0,79] please include your code input and output in the answers.
An integer 'n' greater than 1 is prime if its only positive divisor is 1 or...
An integer 'n' greater than 1 is prime if its only positive divisor is 1 or itself. For example, 2, 3, 5, and 7 are prime numbers, but 4, 6, 8, and 9 are not. Write a python program that defines a function isPrime (number) with the following header: def isPrime (number): that checks whether a number is prime or not. Use that function in your main program to count the number of prime numbers that are less than 5000....
Activity 6.6. (a) A positive integer that is greater than 11 and not prime is called...
Activity 6.6. (a) A positive integer that is greater than 11 and not prime is called composite. Write a technical definition for the concept of composite number with a similar level of detail as in the “more complete” definition of prime number. Note. A number is called prime if its only divisors are 1 and itself. This definition has some hidden parts: a more complete definition would be as follows. A number is called prime if it is an integer,...
See four problems attached. These will ask you to think about GCDs and prime factorizations, and...
See four problems attached. These will ask you to think about GCDs and prime factorizations, and also look at the related topic of Least Common Multiples (LCMs). The prime factorization of numbers can be used to find the GCD. If we write the prime factorization of a and b as a = p a1 1 p a2 2 · p an n b = p b1 1 p b2 2 · p bn n (using all the primes pi needed...
***Python Hailstones, also known as the Collatz sequence, are a mathematical curiosity. For any number in...
***Python Hailstones, also known as the Collatz sequence, are a mathematical curiosity. For any number in the sequence, the next number in the sequence is determined by two simple rules: If the current number n is odd, the next number in the sequence is equal to 3 * n + 1 If the current number n is even instead, the next number in the sequence is equal to one half of n (i.e., n divided by 2) We repeat this...
IN C LANGUAGE This program initially reads two integers from standard input: (1) an integer T...
IN C LANGUAGE This program initially reads two integers from standard input: (1) an integer T and (2) a positive integer N. It then reads N integers and counts the numbers that are greater than T and the numbers than are less than T. It then prints out these two counts. Example What is the threshold value? 7 How many values? 5 Enter 5 values: 6 7 9 9 8 3 values are greater than 7 1 values are less...
Problem 2: Python 3 Implement a function called gee_whiz that does the following: given argument n,...
Problem 2: Python 3 Implement a function called gee_whiz that does the following: given argument n, a positive integer, it returns a list of n tuples corresponding to the numbers 1 through n (both inclusive): the tuple for the number k consists of k as the first component, and exactly one of the following strings as the second: • the string 'two!' if k is divisible by 2 • the string 'three!' if k is divisible by 3 • the...
Choose from the following: Complement (A’), Complement Rule, Expected Value, Factorial, Likelihood, or Random Variable 1....
Choose from the following: Complement (A’), Complement Rule, Expected Value, Factorial, Likelihood, or Random Variable 1. Probability is the measure of the relative[ ________________] that an event will occur. 2. The [_____ _____] states that the probability of an event not occurring is equal to one minus the probability of its occurrence. 3. The mean of a probability distribution is referred to as its [______ ______]. 4. For a positive integer n, the product of all the positive integers less...