簡體   English   中英

在RSA實現中處理BigInteger

[英]Handling BigIntegers in RSA implementation

我試圖用大整數在Java中實現RSA加密,這顯然是從q,p素數(每個128字節-1024位)隨機生成模數的時候。

我的問題是,有時模數出現257個字節,其中第一個字節為0,第二個字節始終以1(1 * * )( star等於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);

java.math.BigInteger始終在其toByteArray()方法及其BigInteger(byte[])構造函數中使用一個符號位。 因此,第一個字節的最高有效位表示符號。 如果您有256 * 8位無符號數據,並且該數據中的最高有效位是1,那么您必須再有一個0字節來表示該數字是無符號的。 刪除該字節將導致該字節被解釋為負數,並帶有您描述的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM