آموزش ایجاد کلیدهای RSA در رمزنگاری با پایتون

3 سال پیش
آموزش ایجاد کلیدهای RSA در رمزنگاری با پایتون

آموزش ایجاد کلیدهای RSA در رمزنگاری با پایتون

 

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش ایجاد کلیدهای RSA در رمزنگاری با پایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پایتون مختص بازار کار

ایجاد کلیدهای RSA

مراحل زیر در تولید کلیدهای RSA دخیل است –

  • دو عدد اول بزرگ یعنی p و q ایجاد کنید. حاصلضرب این اعداد n نامیده می شود ، جایی که n = p * q باشد
  • یک عدد تصادفی ایجاد کنید که با (p-1) و (q-1) نسبتاً اول باشد. اجازه دهید شماره به عنوان e فراخوانی شود.
  • وارون مدولار e را محاسبه کنید. معکوس محاسبه شده به عنوان d فراخوانی می شود.

 

الگوریتم های ایجاد کلیدهای RSA

ما به دو الگوریتم اصلی برای تولید کلیدهای RSA با استفاده از پایتون – ماژول Cryptomath و ماژول Rabin Miller نیاز داریم.

ماژول رمزنگاری

کد منبع ماژول رمزنگاری که تمام پیاده سازی های اساسی الگوریتم RSA را دنبال می کند به شرح زیر است –

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

 

ماژول RabinMiller

کد منبع ماژول RabinMiller که تمام پیاده سازی اساسی الگوریتم RSA را دنبال می کند به شرح زیر است –

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 7< 2):
      return False
   lowPrimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 
   ۶۷, ۷۱, ۷۳, ۷۹, ۸۳, ۸۹, ۹۷, ۱۰۱, ۱۰۳, ۱۰۷, ۱۰۹, ۱۱۳, ۱۲۷, ۱۳۱, ۱۳۷, ۱۳۹, ۱۴۹, ۱۵۱, 
   ۱۵۷, ۱۶۳, ۱۶۷, ۱۷۳, ۱۷۹, ۱۸۱, ۱۹۱, ۱۹۳, ۱۹۷, ۱۹۹, ۲۱۱, ۲۲۳, ۲۲۷, ۲۲۹, ۲۳۳, ۲۳۹, ۲۴۱, 
   ۲۵۱, ۲۵۷, ۲۶۳, ۲۶۹, ۲۷۱, ۲۷۷, ۲۸۱, ۲۸۳, ۲۹۳, ۳۰۷, ۳۱۱, ۳۱۳,۳۱۷, ۳۳۱, ۳۳۷, ۳۴۷, ۳۴۹, 
   ۳۵۳, ۳۵۹, ۳۶۷, ۳۷۳, ۳۷۹, ۳۸۳, ۳۸۹, ۳۹۷, ۴۰۱, ۴۰۹, ۴۱۹, ۴۲۱, ۴۳۱, ۴۳۳, ۴۳۹, ۴۴۳, ۴۴۹, 
   ۴۵۷, ۴۶۱, ۴۶۳, ۴۶۷, ۴۷۹, ۴۸۷, ۴۹۱, ۴۹۹, ۵۰۳, ۵۰۹, ۵۲۱, ۵۲۳, ۵۴۱, ۵۴۷, ۵۵۷, ۵۶۳, ۵۶۹, 
   ۵۷۱, ۵۷۷, ۵۸۷, ۵۹۳, ۵۹۹, ۶۰۱, ۶۰۷, ۶۱۳, ۶۱۷, ۶۱۹, ۶۳۱, ۶۴۱, ۶۴۳, ۶۴۷, ۶۵۳, ۶۵۹, ۶۶۱, 
   ۶۷۳, ۶۷۷, ۶۸۳, ۶۹۱, ۷۰۱, ۷۰۹, ۷۱۹, ۷۲۷, ۷۳۳, ۷۳۹, ۷۴۳, ۷۵۱, ۷۵۷, ۷۶۱, ۷۶۹, ۷۷۳, ۷۸۷, 
   ۷۹۷, ۸۰۹, ۸۱۱, ۸۲۱, ۸۲۳, ۸۲۷, ۸۲۹, ۸۳۹, ۸۵۳, ۸۵۷, ۸۵۹, ۸۶۳, ۸۷۷, ۸۸۱, ۸۸۳, ۸۸۷, ۹۰۷, 
   ۹۱۱, ۹۱۹, ۹۲۹, ۹۳۷, ۹۴۱, ۹۴۷, ۹۵۳, ۹۶۷, ۹۷۱, ۹۷۷, ۹۸۳, ۹۹۱, ۹۹۷]
    
   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

 

کد کامل برای تولید کلیدهای RSA به شرح زیر است –

import random, sys, os, rabinMiller, cryptomath

def main():
   makeKeyFiles('RSA_demo', 1024)

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)

def makeKeyFiles(name, keySize):
   # Creates two files 'x_pubkey.txt' and 'x_privkey.txt' 
      (where x is the value in name) with the the n,e and d,e integers written in them,
   # delimited by a comma.
   if os.path.exists('%s_pubkey.txt' % (name)) or os.path.exists('%s_privkey.txt' % (name)):
      sys.exit('WARNING: The file %s_pubkey.txt or %s_privkey.txt already exists! Use a different name or delete these files and re-run this program.' % (name, name))
   publicKey, privateKey = generateKey(keySize)
   print()
   print('The public key is a %s and a %s digit number.' % (len(str(publicKey[0])), len(str(publicKey[1])))) 
   print('Writing public key to file %s_pubkey.txt...' % (name))
   
   fo = open('%s_pubkey.txt' % (name), 'w')
    fo.write('%s,%s,%s' % (keySize, publicKey[0], publicKey[1]))
   fo.close()
   print()
   print('The private key is a %s and a %s digit number.' % (len(str(publicKey[0])), len(str(publicKey[1]))))
   print('Writing private key to file %s_privkey.txt...' % (name))
   
   fo = open('%s_privkey.txt' % (name), 'w')
   fo.write('%s,%s,%s' % (keySize, privateKey[0], privateKey[1]))
   fo.close()
# If makeRsaKeys.py is run (instead of imported as a module) call
# the main() function.
if __name__ == '__main__':
   main()

 

خروجی 

همانطور که در خروجی زیر نشان داده شده است ، کلیدهای عمومی و کلیدهای خصوصی در پرونده های مربوطه تولید و ذخیره می شوند.

Publickey

 

منبع.

لیست جلسات قبل آموزش رمزنگاری با پایتون 

  1. آموزش رمزنگاری با پایتون
  2. بررسی اجمالی آموزش رمزنگاری با پایتون 
  3. آموزش رمزنگاری دو گانه در رمزنگاری با پایتون
  4. مرور و نصب پایتون
  5. آموزش رمز معکوس در رمزنگاری با پایتون
  6. آموزش رمز سزار در رمزنگاری با پایتون
  7. آموزش الگوریتم ROT13 در رمزنگاری با پایتون 
  8. آموزش رمزنگاری جابجایی در رمزنگاری با پایتون
  9. آموزش رمزنگاری با رمزنگاری جابجایی
  10. آموزش رمزگذاری فایل ها با رمزنگاری در پایتون
  11. آموزش رمزگشایی فایل ها با رمزنگاری در پایتون
  12. آموزش رمزگذاری و رمزگشایی Base64 در رمزنگاری با پایتون 
  13. آموزش فرایند XOR در رمزنگاری با پایتون
  14. آموزش رمز ضربی در رمزنگاری با پایتون
  15. آموزش رمز مستوی در رمزنگاری با پایتون
  16. آموزش هک کردن رمز تک حروف در رمزنگاری با پایتون
  17. آموزش رمز جایگزینی ساده در رمزنگاری با پایتون
  18. آموزش تست رمزگذاری جایگزینی ساده در رمزنگاری با پایتون
  19. آموزش رمزگشایی از رمزنگاری جایگزینی ساده در رمزنگاری با پایتون
  20. آموزش ماژول های رمزنگاری پایتون
  21. درک رمز ویژنر در رمزنگاری با پایتون
  22. آموزش پیاده سازی رمز ویژنر در رمزنگاری با پایتون
  23. آموزش اجرای رمز یکبار پد در رمزنگاری با پایتون
  24. آموزش رمزنگاری متقارن و نامتقارن در رمزنگاری با پایتون
  25. آموزش الگوریتم RSA در رمزنگاری با پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه