我正在用Java创建数字签名软件,希望该软件可以使用参数(string filename, string keyfile)验证消息。
但是我在以下代码行遇到了异常:
this.list2 = (List) in.readObject();
java.lang.ClassCastException: [B无法强制转换为java.util.List。如何解决?
this.list2 = (List) in.readObject();
java.lang.ClassCastException: [B无法强制转换为java.util.List。如何解决?
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.nio.file.Files;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
private boolean verifySignature(byte[] data, byte[] signature, String
keyFile) throws Exception {
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(getPublic(keyFile));
sig.update(data);
return sig.verify(signature);
}
public void VerifyMessage(String filename, String keyFile) throws Exception
{
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename)))
{
this.list2 = (List<byte[]>) in.readObject();
}
lbl13.setText(verifySignature(list2.get(0), list2.get(1), keyFile) ? "VERIFIED MESSAGE" +
"\n----------------\n" + new String(list2.get(0)) : "Could not verify the signature.");
}
in.readObject()
强制转换为List<byte[]>
,看起来in.readObject()
返回的是byte[]
。 - MadProgrammerbyte[]
,或更改源文件的编写方式。 - MadProgrammer