RSA Encryption From Scratch - Math & Python Code

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • Today we learn about RSA. We take a look at the theory and math behind it and then we implement it from scratch in Python.
    ◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾
    📚 Programming Books & Merch 📚
    🐍 The Python Bible Book: www.neuralnine.com/books/
    💻 The Algorithm Bible Book: www.neuralnine.com/books/
    👕 Programming Merch: www.neuralnine.com/shop
    🌐 Social Media & Contact 🌐
    📱 Website: www.neuralnine.com/
    📷 Instagram: / neuralnine
    🐦 Twitter: / neuralnine
    🤵 LinkedIn: / neuralnine
    📁 GitHub: github.com/NeuralNine
    🎙 Discord: / discord
    Timestamps:
    (0:00) Intro
    (0:25) Mathematical Theory
    (29:15) Python Implementation
    (42:30) Outro
  • Věda a technologie

Komentáře • 56

  • @_base_2
    @_base_2 Před 11 měsíci +14

    Please keep this type of in-depth video coming! I learned a tremendous amount from your clear explanations, and am able to implement my own programs based on your clear, and logical, step-by-step walk through. Please, more like this!!! 😃

  • @Peacfull
    @Peacfull Před 8 měsíci +13

    here is the code if you are lazy to write:
    import random
    import math
    # n= p.q
    #phi(n) = phi(p.q)=phi(p).phi(q) = (p-1). (q-1)
    #phi(n) = (p-1.q-1)
    def is_prime (number):
    if number < 2:
    return False
    for i in range (2, number // 2 +1):
    if number % i == 0:
    return False
    return True
    def generate_prime (min_value, max_value):
    prime = random.randint (min_value, max_value)
    while not is_prime(prime):
    prime = random.randint(min_value, max_value)
    return prime
    def mod_inverse(e, phi):
    for d in range (3, phi):
    if (d * e) % phi == 1:
    return d
    raise ValueError ("Mod_inverse does not exist!")
    p, q = generate_prime(1000, 50000), generate_prime ( 1000, 50000)
    while p==q:
    q= generate_prime(1000, 50000)
    n = p * q
    phi_n = (p-1) * (q-1)
    e = random.randint (3, phi_n-1)
    while math.gcd(e, phi_n) != 1: #gcd=greater common denometer != not equal
    e = random.randint (3, phi_n - 1)
    d = mod_inverse(e, phi_n)
    message = input("Enter your message to Encrypt ")
    print ("Prime number P: ", p)
    print ("Prime number q: ", q)
    print ("Public Key: ", e)
    print ("Private Key: ", d)
    print ("n: ", n)
    print ("Phi of n: ", phi_n, " Secret")
    message_encoded = [ord(ch) for ch in message]
    print ("Message in ASCII code: ", message_encoded)
    # (m ^ e) mod n = c
    ciphertext = [pow(ch, e, n) for ch in message_encoded]
    print (message," Ciphered in: ", ciphertext)
    Decodemsg= [pow(ch, d, n) for ch in ciphertext]
    print ("back to ASCII: ", Decodemsg)
    msg = "".join (chr(ch) for ch in Decodemsg)
    print("from ASCII to TEXT: ", msg)

  • @tanzir3678
    @tanzir3678 Před rokem +2

    Good one. Yes, thorough explanation covering Maths and all is much beneficial than just demonstration of using some libraries. There are tons of people out there who would follow the second approach. And that makes you standout.

  • @efox29
    @efox29 Před rokem +3

    I havent watched the video yet, but title alone and topic. Thumbs up.

  • @Radical9535
    @Radical9535 Před rokem +2

    thanks i really like this being on the cyber security side of things i have to teach myself coding basically so these videos are great on stuff like this and now i have an understanding of how rsa works mathematically so thanks!

  • @huliang9001
    @huliang9001 Před 6 měsíci

    I really like these more theory based videos explained from scratch. In this way, I really learned something deep.

  • @borisakelovic9930
    @borisakelovic9930 Před 3 měsíci

    This "from the scratch" is sooo well done , Bravo

  • @paulthomas1052
    @paulthomas1052 Před rokem

    Thanks - another really useful lecture and practical demo. Cheers 😃

  • @sl3262
    @sl3262 Před 5 měsíci

    I really like these more in depth videos. For me, learning the fundamental principles of how something works is by far the best way to understand it. Definitely do what has been suggested elsewhere: watch the theory then try and implement it in Python before seeing how it's done! More of these please, if you can!

  • @cawkcheck
    @cawkcheck Před rokem

    amazing video. we need more of these

  • @Abomin81onVlog
    @Abomin81onVlog Před rokem +1

    I enjoyed this video greatly.

  • @silentkille4
    @silentkille4 Před 5 měsíci

    loving the content its helping me alot

  • @TritdawG
    @TritdawG Před 7 měsíci

    Great video; thank you for sharing.. super helpful!

  • @slickslack4420
    @slickslack4420 Před měsícem

    Please make more videos like this it helps us code by understanding the concepts

  • @lintop3908
    @lintop3908 Před rokem

    Yeah, I really wanted you to release a video on this topic from scratch

  • @aryanlivi3553
    @aryanlivi3553 Před 5 měsíci

    Great Explanation!!

  • @micleh
    @micleh Před rokem

    I like such videos a lot. I'll definitely use this video in my upper sixth computer science course here in Germany since RSA is a topics on the curriculum. The implementaion will be in JAVA, though, since this is the language used in Years 11-13.

  • @Ungerlogik
    @Ungerlogik Před rokem

    I live the mix of these kind of videos and cool usefull stuff (like pomodoro). 😊

  • @nicolamombelli2149
    @nicolamombelli2149 Před rokem

    Great explanation and nice example in Python. Thanks.

  • @bartektrybaa3922
    @bartektrybaa3922 Před rokem

    I found this usefull for my studies. Thanks :D

  • @huliang9001
    @huliang9001 Před 6 měsíci

    Really awesome! Thanks bro!😀

  • @harsharya828
    @harsharya828 Před rokem

    Thanks for this knowledge.

  • @cpp705
    @cpp705 Před rokem

    thanks i needed it

  • @chyldstudios
    @chyldstudios Před rokem

    awesome, thanks for making this video,.

  • @khairysuleiman4
    @khairysuleiman4 Před 7 měsíci

    Thanks Mr. Best!

  • @salahtamimy5322
    @salahtamimy5322 Před 2 měsíci

    Thank you 👍

  • @prosodyspeaks4036
    @prosodyspeaks4036 Před 7 měsíci

    yeah! more like this!

  • @lennuard_6998
    @lennuard_6998 Před rokem +26

    coding challange: only watch the math part and (try to) implement it yourself before watching the coding part

    • @micleh
      @micleh Před rokem +2

      Exactly. I often do this in my lessons (flipped classroom principle): watching a video at home, ironing out diffuculties in class and them implementing it in the lessons so as to figure out if the theory has been understood.

    • @certitolla202
      @certitolla202 Před 11 měsíci +1

      Done 😸✅✅

  • @ghAmputeeAtheist
    @ghAmputeeAtheist Před rokem +1

    you can get the inverse of e mod phi with pow(e,-1,phi)

  • @piotrmazgaj
    @piotrmazgaj Před rokem

    Very nice.

  • @PawitSahare
    @PawitSahare Před rokem

    And awesome video bro

  • @JO06
    @JO06 Před 9 měsíci

    Thank you brother

  • @seeesh_
    @seeesh_ Před rokem

    Hi, I would like to ask some Pandera tutorial to do data quality, doing some advance transformation on data. That's possible?

  • @RajapuRishitha-jc6xy
    @RajapuRishitha-jc6xy Před měsícem

    If n is known, since n can be written as the product of p and q only(given p and q are prime numbers), we can find p and q right?

  • @nejathakan5521
    @nejathakan5521 Před rokem

    Keep this kind of videos please.

  • @tcgvsocg1458
    @tcgvsocg1458 Před rokem

    really interesting these day i look in aes 256 bits encry^tion i don t know whitch is best but both are really interresting

  • @DroughtBee
    @DroughtBee Před měsícem

    Doesn’t this leave itself open to frequency analysis because all the letters are just given (effectively for our purposes) random numbers? Why is this better than just any other mono-alphabetical code?

  • @bhagyalakshmi1053
    @bhagyalakshmi1053 Před rokem

    How to create vlu ?

  • @WahranRai
    @WahranRai Před 8 měsíci +1

    27:43 Which calculator did you use

    • @garydunken7934
      @garydunken7934 Před 4 měsíci

      Microsoft Windows calculator

    • @WahranRai
      @WahranRai Před 4 měsíci

      @@garydunken7934 Thank you, i already found it !

  • @Peacfull
    @Peacfull Před 8 měsíci

    nice work but where you selected 7, and that part i did not get it completely how did you come up with 7. I have wachted that part again and it was not clear for me. but still your explanation was very good. thank you. keep up the good work.

  • @danielw8620
    @danielw8620 Před rokem

    May I ask what your educational background is? Are you self taught, did you go to college for a Math degree/CS degree? Thanks

  • @Andr_e_y
    @Andr_e_y Před 25 dny

    It's a shame there's no salt here. Thank you😊

  • @JarppaGuru
    @JarppaGuru Před 4 měsíci

    26:26 bob know e n and he make c. and m=c^d mod n
    r we clear yet? how hard is find out d? bob know all but d. we can brute force private key so long as we get our original m=15
    alice public key need hold something its e and n
    alice privet key have to have some number and p q. n and phi we can calculate and e is just mod inverse d
    so how hard brute force m=c^d mod n. if we know all but not d xD

  • @JarppaGuru
    @JarppaGuru Před 4 měsíci

    29:01 so how hard brute force private key if we know s n and m. bob can do s=m^d mod n too
    mean try every thing 141=15^d mod 143
    why we sign using d and n when we should sign using phi_n
    alices=m^d mod phi_n-1
    bobs=alices^m mod e = 1 if message and sign match at least all test i calculated LOL
    now bob cant brute force alice d... or i have formula for that do its same simple LOL
    but u made tutorial i say dont do s=m^d mod n you give away private key. he knows all but one. you need have atleast 2 unkown number in equation to make it harder

  • @raspberryPi1337
    @raspberryPi1337 Před rokem

    Hello, how old are you?

    • @heptex8989
      @heptex8989 Před rokem

      What kind of question is that lmfao

  • @zstar8397
    @zstar8397 Před 7 měsíci

    Hey hope you are doing alright just I wanna say that
    GOD loved the world so much he sent his only begotten
    son Jesus to die a brutal death for us so that we can have eternal life and we can all accept this amazing gift this by simply trusting in Jesus, confessing that GOD raised him from the dead, turning away from your sins and forming a relationship with GOD.

  • @PawitSahare
    @PawitSahare Před rokem

    Don't reply this comment