Ich möchte eine Datei signieren, die ich mit JFileChooser
eingelesen habe. Aber wenn ich es auf das Terminal drucke, kann ich nur Questmarks und andere nicht lesbare Zeichen lesen. Mein Code zu unterzeichnen ist:Konvertieren Sie die Unterschrift in lesbar (Bouncycastle)
public static void sign() throws Exception{
byte[] file = fileChooser();
store = KeyStore.getInstance(storeType);
FileInputStream in = new FileInputStream(new File(storePath));
store.load(in, storePassword);
in.close();
Key priv = store.getKey("test", storePassword);
System.out.println(priv.toString() + "priv string");
X509Certificate cert = (X509Certificate) store.getCertificate("Subject");
ContentSigner signer = new JcaContentSignerBuilder("SHA512withRSA").build((RSAPrivateKey) priv);
//Sign Data
Signature signature = Signature.getInstance("SHA512WithRSA");
signature.initSign((RSAPrivateKey) priv);
signature.update(file);
//Build cms
CMSTypedData data = new CMSProcessableByteArray(signature.sign());
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSignerInfoGenerator(
new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().build())
.build(signer, cert));
//Get signed data
CMSSignedData sigData = gen.generate(data, false);
byte[] sig = (byte[]) sigData.getSignedContent().getContent();
sig.toString();
String content = new String(sig);
System.out.println("Signed content: " + content + "\n");
}
Wie kann ich die Signatur Menschen lesbares Format? erwarten
Bei beiden Codierungsmethoden gibt es mir den Fehler: Die Methode encode (byte []) im Typ Hex ist nicht anwendbar für die Argumente (CMSSignedData) – nolags
Sie müssen die Variable 'byte [] sig' verwenden, nicht die' ' sigData' –