RMD*_*Dan 1 java encryption rsa
我正在使用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");
}
Run Code Online (Sandbox Code Playgroud)
无论输入如何,以下两个函数都返回97.如果我注释掉模数并返回val,则返回值为2147483647.
类型转换double到int似乎是问题,但我不知道为什么会这样.这些方法只是静态的,因为我是从main方法调用它们的.
2147483647是int max值,又名2 ^ 31-1.对于任何值> = 2,您会得到溢出,因为2 ^ 37> 2 ^ 31-1
为了获得模数437,您应该在每一步都获得模数.例如:
private static int myPow(int a, int b, int mod){
int ret = 1;
for(int i = 0; i < b; i++)
{
ret = (ret * a) % mod;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |