posted 11 years ago
Hi all..
Am facing a problem with the primitive types ..
Am trying to develop a mini program on implementing RSA Algorithm to encrypt and decrypt files. I hav mentioned the steps what i did ..
1. I read the file content into a byte array and get those int values and do RSA encryption and get a key .
2. Now on the decryption part am using this key and generate the above int value and bring it back to char.
eg: 6 > the ascii value to be encrypted
int encryptVal = (int)Math.pow(6,7) % 119;
int decryptVal = (int)Math.pow(encryptVal ,77)%119;
but the decryptVal is not showing as 6 .. when i get it as double am getting different values ..
I dont know where its going wrong .. pls help me out
Thanks,
Balaji
Am facing a problem with the primitive types ..
Am trying to develop a mini program on implementing RSA Algorithm to encrypt and decrypt files. I hav mentioned the steps what i did ..
1. I read the file content into a byte array and get those int values and do RSA encryption and get a key .
2. Now on the decryption part am using this key and generate the above int value and bring it back to char.
eg: 6 > the ascii value to be encrypted
int encryptVal = (int)Math.pow(6,7) % 119;
int decryptVal = (int)Math.pow(encryptVal ,77)%119;
but the decryptVal is not showing as 6 .. when i get it as double am getting different values ..
I dont know where its going wrong .. pls help me out
Thanks,
Balaji
posted 11 years ago
Math.pow(48, 7) is a double with a value of 5.87068342272E11, which is beyond the range of an int. In fact, casting this to type int...
(int)Math.pow(48,7) is 2147483647, which you might recognize as Integer.MAX_VALUE.
Now, applying the modulus, Math.pow(48, 7) % 119 is 5.87068342272E11 % 119, which is a double 6.0. Casting this result to type int...
(int)(Math.pow(48, 7) % 119) is (int)(5.87068342272E11 % 119), which is 6. But note that this is not the same as casting the double 5.87068342272E11 to int 2147483647 and then applying the modulus...
(int)Math.pow(48,7) % 119 is 2147483647 % 119, which is 8.
(int)Math.pow(48,7) is 2147483647, which you might recognize as Integer.MAX_VALUE.
Now, applying the modulus, Math.pow(48, 7) % 119 is 5.87068342272E11 % 119, which is a double 6.0. Casting this result to type int...
(int)(Math.pow(48, 7) % 119) is (int)(5.87068342272E11 % 119), which is 6. But note that this is not the same as casting the double 5.87068342272E11 to int 2147483647 and then applying the modulus...
(int)Math.pow(48,7) % 119 is 2147483647 % 119, which is 8.
"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
posted 11 years ago
Also...
I would be remiss if I didn't mention the risk of losing precision with floatingpoint arithmetic. See Some Things you should Know About Floating Point Arithmetic.
If you are performing floatingpoint arithmetic that demands precision, then you should consider using BigDecimal instances rather than primitive float or double types.
I would be remiss if I didn't mention the risk of losing precision with floatingpoint arithmetic. See Some Things you should Know About Floating Point Arithmetic.
If you are performing floatingpoint arithmetic that demands precision, then you should consider using BigDecimal instances rather than primitive float or double types.
"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
Of course, I found a very beautiful couch. Definitely. And this tiny ad:
The WEB SERVICES and JAXRS Course
https://coderanch.com/t/690789/WEBSERVICESJAXRS
