RSA的核心計算就是計算a^e mod m,其中,a,e可隨機生成,m爲大整數。
常規使用的int和long無法表示超大整數,因此使用Java的BigInteger來實現計算a^e mod m:
public static BigInteger mod(BigInteger a,BigInteger e,BigInteger m) {
BigInteger kex = new BigInteger("1");
String binary = e.toString(2);
for (int i = binary.length() - 1 ; i >= 0 ; i--){
if (binary.charAt(i) == '1'){
kex = (kex.multiply(a)).remainder(m);
a = (a.multiply(a)).remainder(m);
}else {
a=(a.multiply(a)).remainder(m);
}
}
return kex;
}