0
我試圖用大整數在Java中實現RSA加密,顯然模數是從q,p素數中隨機生成的,每個128字節-1024位。在RSA實現中處理BigIntegers
我的問題是,有時模出來257個字節,其中它的第一字節爲0,第二個總是以1(1 * * )開始(星=無論0 \ 1)。其他次這是一個積極的256個字節,其中第一個字節爲0
當我發送給modPow係數和指數我得到的開始:
java.lang.ArithmeticException: BigInteger: modulus not positive
即使我試圖刪除第一個0字節保持與其他256人我得到了問題。
一些代碼示例:
BigInteger p = new BigInteger(1024,20,new Random());
BigInteger q = new BigInteger(1024,20,new Random());
//multiplying p & q and inserting it to modulus
ByteArray modulus = new ByteArray(p.multiply(q).toByteArray());
if (modulus.length()==257)
{
//if the first byte is 00 then erasing it
flag =false;
ByteArray temp = new ByteArray(TypeUtils.subArray(modulus.getByteArray(), 1, 256));
modulus = temp;
}
BigInteger modulusInBig = new BigInteger(TypeUtils.Byte2byte(modulus.getByteArray()));
BigInteger answer = inTextInBig.modPow(exponentInBig, modulusInBig);
不要擺脫最初的0字節,它屬於那裏。 BigInteger的Java字節編碼與稱爲DER編碼的方案兼容。如果正BigInteger的高位字節大於等於128,那麼正確的編碼是以00字節爲結果的前綴。 –