Python Forum
Can I do this faster? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Data Science (https://python-forum.io/forum-44.html)
+--- Thread: Can I do this faster? (/thread-2238.html)



Can I do this faster? - Gasimoe - Feb-28-2017

Hello!

I´m making a RSA-encrypting/decrypting program.

When I encrypt I use a list but t,e and n are big numbers so this take a while. Is there anyway python can do the exact same thing but faster?

wordlist_krypterad = [(t ** e) % n for t in wordlist_ascii_int]
Thanx!
/Gasimoe


RE: Can I do this faster? - nilamo - Feb-28-2017

I'd start by making it functional.  Once it works that way, you can look into paralleling it to take advantage of multiple cpu cores.

Without actually testing the code, here's an example of making it functional:
transform = lambda t: (t**e) % n
wordlist_krypterad = map(transform, wordlist_ascii_int)



RE: Can I do this faster? - stranac - Feb-28-2017

https://docs.python.org/3/library/functions.html#pow


RE: Can I do this faster? - zivoni - Feb-28-2017

Another way could be using numpy (if your t and n fit into int32) - you are doing exactly same operation on list of numbers, if you transform it to 1-D array, you can manipulate them all at once. I am not sure if there is modular exponentiation in numpy - if not, to avoid overflow (and to speed it) you will need to implement it. With  binary exponentiation it could by quite fast.