The Right Tool (Why I chose Java to do RSA)
Brief: I learned something valuable last week when working on this RSA encryption/decryption assignment for my Computer Security class. It’s important to be versatile when doing computer science — we must ensure we always use the most efficient tool. If we aren’t versatile, we risk taking tremendous amounts of time trying to reimplement something that already exists elsewhere.
So, what tool is the right tool to quickly throw together RSA encryption?
It turns out that Java does an excellent job. Its BigInteger class has all the ingredients you’ll ever need.
// This function generates a new probable prime ... BigInteger p = BigInteger.probablePrime(bits, random); // This function performs modulus inverse ... BigInteger d = e.modInverse(phi_n); // These functions can be used to check your work ... BigInteger one = d.multiply(e).mod(phi_n); BigInteger one = p.gcd(q); // This function is at the heart of RSA ... BigInteger C = M.modPow(d, n);
Before I looked at the Java documentation, I had plans to do this with Python and some of my classmates had plans with MATLAB. It’s not that these are inherently bad technologies — they’re just not the right tool.
As much as I have gripes with Java, I’ve got to say that this made me and a lot of my class very happy 😀