我正在使用 RSA 算法进行简单的加密,发现了一个奇怪的错误。
private static Integer testEnc(Integer value){
Integer val = (int)Math.pow(value, 37);
return val % 437;
}
private static Integer testDec(Integer value){
Integer val = new Integer((int)Math.pow(value, 289));
return val % 437;
}
public static void main(String[] args) {
System.out.print("Encode 55 = ");
Integer encoded = testEnc(2);
System.out.println(encoded + "\n");
System.out.print(encoded + " decoded = ");
Integer decoded = testDec(3977645);
System.out.println(decoded + "n");
}
无论输入如何,以下两个函数都返回 97。如果我注释掉模数并只返回 val,则返回值为 2147483647。
将 double 类型转换为 int 似乎是问题所在,但我不确定为什么会这样。这些方法是静态的,只是因为我是从主方法调用它们的。