2013年3月8日 星期五

[JAVA] 隨機長度的陣列

  在製作密碼學的程式時,最常遇到的功能不免是加密與解密,但是其實加密時有時為了其安全性,每次產生的byte[]陣列長度不一定會一樣,所以在程式碼裡面,我們無法將他的陣列長度寫死。

以下介紹此方法,可以彈性的存儲陣列與還原陣列:

public class debyte {

public static void main(String[] args)
{
 String str1 = "qwertyuiop3456";
 //假設這個字串每次產生出來byte[]陣列長度每次都不同
 byte[] byt1 = str1.getBytes();
 //我們先取得他的長度(此方法較為彈性,這樣可以每次皆取得該陣列的長度)
 int byt1LN = byt1.length;
 //我們先來宣告一個較長的陣列
 byte[] solongbyte = new byte[5000];
 //然後將byt1陣列寫入這個陣列中(我們從位置0開始寫),長度也一併寫進去(我們從位置4900開始寫)
 System.arraycopy(byt1, 0, solongbyte, 0, byt1LN);
 //先把長度值轉換成byte[]寫入
 System.arraycopy(String.valueOf(byt1LN).getBytes(), 0, solongbyte, 4900, String.valueOf(byt1LN).getBytes().length);
 
 System.out.println("======還原測試======");
 //還原方法參數介紹:原文的第一個位置,原文長度的第一個位置,要解開的陣列
 byte[] backtest = getB(0,4900,solongbyte);
 System.out.println(new String(backtest));
}

//ini起始讀取值得位置,ls讀取該數值長度的起始位置,byte[]要拆解的陣列
public static byte[] getB(int initial,int ls,byte[] Len400)
{
 int pl=0;
 int le = ls +5;
 for(int i=ls;i<le;i++)
 {
  int temp = (int)Len400[i];
  if(temp == 0)
  {
   pl=i;
   break;
  }
 }
 pl = pl - ls;
 byte[] plb = new byte[pl];
 System.arraycopy(Len400, ls, plb, 0, pl);
 int reback_plen = Integer.parseInt(new String(plb));
 byte[] backp = new byte[reback_plen];
 System.arraycopy(Len400, initial, backp, 0, reback_plen);
 return backp;

}
}


JAVA檔下載:file