byte數組和正數BigInteger之間的相互轉換


舊代碼

  public static void main(String[] args) {
    SecureRandom random = new SecureRandom();
    byte[] key = new byte[16];
    random.nextBytes(key);

    BigInteger bigInteger = new BigInteger(key);
    System.out.println("old:" + Arrays.toString(key));
    System.out.println(bigInteger);
    System.out.println("new:" + Arrays.toString(bigInteger.toByteArray()));

  }

雖然這段代碼可以進行正常轉換,但是BigInteger不是正數范圍,在密碼學計算中,都要求是正數

指定byte數組為正數BigInteger

BigInteger m = new BigInteger(1, bytesMessage);

正數BigInteger,會有符號位,去除第一個符號位0,還原得到原始數組

  public static byte[] toByteArray(BigInteger bi) {
    byte[] array = bi.toByteArray();
    if (array[0] == 0) {
      byte[] tmp = new byte[array.length - 1];
      System.arraycopy(array, 1, tmp, 0, tmp.length);
      array = tmp;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM