1 回答

TA貢獻1875條經(jīng)驗 獲得超5個贊
更新:
RSA 并不意味著加密大量數(shù)據(jù)。在這種情況下,使用 1024 位 RSA 密鑰和默認為 PKCS#1 v1.5 的填充,他不能加密超過 117 字節(jié)的數(shù)據(jù)。——詹姆斯·K·波爾克
這里有很多問題。
首先,您設(shè)置System.out新流并關(guān)閉它。因此,您看不到來自您的應(yīng)用程序的任何響應(yīng)。
解決方案1:保留默認輸出流并將其重新設(shè)置
PrintStream defaultOutStream = System.out;
PrintStream imprimir = new PrintStream(saida);
System.setOut(imprimir);
System.out.println(entrada);
saida.close();
System.setOut(defaultOutStream);
解決方案2:以不同的方式寫入文件,例如
try (FileOutputStream saida = new FileOutputStream("arquivo.txt");){
saida.write(entrada.getBytes(Charset.forName("UTF-8")));
} catch (Exception e){
e.printStackTrace();
}
其次,你有一個例外。您將看到“Problema no manuseio do arquivo”。在解決第一個問題后在您的控制臺中。但是沒有堆棧跟蹤就沒有幫助。您需要更新 catch 塊以打印異常的原因。例如:
catch(Exception e) {
e.printStackTrace();
System.out.println("Problema no manuseio do arquivo.");
}
在它之后,您將在控制臺中找到異常的名稱和它發(fā)生的行號。這是輸出文件為空的根本原因。
在進一步閱讀之前,請嘗試了解如何修復(fù) nullpointer 以及導(dǎo)致它的原因。練習(xí)調(diào)試!在導(dǎo)致空指針的行上放置斷點。
首先,您使用Cipheras調(diào)用構(gòu)造函數(shù)null:
Criptografar(chaves, null);
接下來,您正在創(chuàng)建正確的密碼,但使用舊密碼調(diào)用進程函數(shù),其值仍然為空:
static private void Criptografar(KeyPair chaves, Cipher ci){
try {
PublicKey publica = chaves.getPublic();
Cipher cifra = Cipher.getInstance("RSA");
cifra.init(Cipher.ENCRYPT_MODE, publica);
FileInputStream entrada_arq_c = new FileInputStream("arquivo.txt");
FileOutputStream saida_arq_c = new FileOutputStream("criptografado.txt");
processFile(ci, entrada_arq_c, saida_arq_c);
}
catch(Exception e){
System.out.println("Erro ao criptografar.");
}
}
解決方案之一是使用正確的參數(shù)調(diào)用函數(shù): processFile(cifra, entrada_arq_c, saida_arq_c);
幾點建議:
您沒有Cipher在Criptografar構(gòu)造函數(shù)中使用參數(shù),請將其刪除
在所有 catch 塊中打印堆棧跟蹤
添加回答
舉報