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への型キャストが問題のようですが、なぜそうなのかわかりません。これらのメソッドは、メインメソッドから呼び出していたためにのみ静的です。