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;
}