1.模幂运算的反复平方算法
public class RSA_RS4ME {
public static void main(String[]args){
System.out.println("a = 2,b = 40,n = 13");
System.out.println(rs4mode(2,40,13));
System.out.println("a = 7,b = 10,n = 11");
System.out.println(rs4mode(7,10,11));
}
public static int rs4mode(int a,int b,int n){
int d = 1;
int c = 0;
String bs = Integer.toBinaryString(b);
int k = bs.length();
for(int i=0;i<k;i++){
c *= 2;
d = (d * d) % n;
if (bs.charAt(i) == '1'){
c += 1;
d = (d * a) % n;
}
}
return d;
}
}
2.扩展Euclid GCD算法
public class RSA_ExtEuclidGCD {
public static void main(String[]args){
int a = 128;
int b = 423;
System.out.println("a = "+ a +",b = " + b);
int[] temp = extEuclidGCD(a,b);
System.out.println(temp[0] + " = " + temp[1] + " * " + a + " + " + temp[2] + " * " + b);
}
public static int[] extEuclidGCD(int a,int b){
int ans;
int[] result=new int[3];
if(b==0)
{
result[0]=a;
result[1]=1;
result[2]=0;
return result;
}
int [] temp = extEuclidGCD(b,a%b);
ans = temp[0];
result[0]=ans;
result[1]=temp[2];
result[2]=temp[1]-(a/b)*temp[2];
return result;
}
}