我正在對由BigInteger值表示的文件實施數字簽名系統。 不幸的是,由於例外「Zero Length BigInteger」,空文件無法通過byte []轉換爲BigInteger。可能生成BigInteger值衝突?
所以我代表與空文件:
bigmesssage = new BigInteger ("0");
我關心的是現在:是否有任何文件值的衝突可能將被表示爲BigInteger的(「0」),當我讀文件「test1」就像下面的程序BigIntegerTest.java一樣!
計劃輸出產量文件「測試1」包含一個「0」:
0: 0
test1: 12298
非常感謝 格里特
import java.io.*;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
public class BigIntegerTest {
/**
* @param args
* @throws NoSuchAlgorithmException
*/
public static void main(String[] args) throws NoSuchAlgorithmException {
// TODO Auto-generated method stub
byte[] message1;
BigInteger bigmessage1 = null;
BigInteger bigmessage2=new BigInteger ("0");
System.out.println("0: "+bigmessage2);
String filename="./bin/test1";
message1 = To_Byte_Array(filename);
bigmessage1= new BigInteger (message1);
System.out.println("test1: "+ bigmessage1);
}
public static byte[] To_Byte_Array (String filename) throws java.security.NoSuchAlgorithmException {
//Liest die Nachricht, die in der Datei filename gespeichert ist, ein und
//speichert sie als byte-Array in message.
//lokale Variablen:
byte[] data = null;
// MessageDigest hash = MessageDigest.getInstance("SHA-512");//SHA2 //removed
//Streams, in:
File textFile;//Textdatei
FileInputStream in;//Dateieingabe-Stream
try {
textFile = new File(filename);
in = new FileInputStream(textFile);
int size = (int)textFile.length(); // Dateilaenge
int read = 0; // Anzahl der gelesenen Zeichen
data = new byte[size]; // Lesepuffer
// Auslesen der Datei
while (read < size)
read =+ in.read(data, read, size-read);
in.close();
// Schreiben des Lesepuffers in Instanz von MessageDigest und speichern des Hash-Werts in message
//hash.update (data);//removed
//message=hash.digest();//removed
}//try
catch (IOException ex) {
ex.printStackTrace();
}
return data;//added
}//To_Byte_Array
}
是,一個字節的文件和 如可在與計算的BigInteger副作用下面的演示中可以看出值'0'。 –
我嘗試了ASCII字符0的文件,它的值爲: 'test1:12298' 然後該文件有兩個字節。 – Leder
是的,你是對的:一個字節^ @具有相同的BigInteger值。 你知道一種方式,如何將empy文件編碼爲唯一的BigInteger值? – Leder