Abspeichern von OutputStream

Leno

Bekanntes Mitglied
Hi ,

habe mal eine weitere Frage ich habe es endlich geschafft mit Java ein PKCS7 Format zu erzeugen meine Methode liefert mit einen OutputStream, jetzt meine Frage wie kann ich diesen OutputStream Lokal auf meiner Festplatte speichrn als z.B. unter C:/ ...

Java:
OutputStream out = unterzeichnen(mKey,myCert,daten ); // hier die Erzeugung des PKCS7 

FileOutputStream f= new FileOutputStream("C:\\ssl\\certs\\test.pkcs7");
		ObjectOutputStream s = new ObjectOutputStream(out);
		s.writeObject(out;
		s.close();

leider funktioniert der Obige ansatz gar nicht bekomme folgende Fehlermeldung :
java.io.NotSerializableException:

Jemand ne Ahnung ??? wie ich das hinbekommen kann ?

Danke für alle Hilfe ; )
 
S

SlaterB

Gast
du meine Güte, ein Stream ist etwas was man absolut nicht speichern kann,
schon gar nicht auf so verrückte Wege wie in deinem Code

poste mal deine unterzeichnen()-Methode, um was geht es denn, beschreibe in Worten bisher schon alles passiert

immer gut: versuche die Ergebnisse, die du speichern willst, mit System.out.println() auszugeben,
wenn das geht, dann ist alles weitere Standardaufgabe,
wenn das nicht geht, dann liegen Probleme in ganz anderen Bereichen als im 'Abspeichern'
 

Leno

Bekanntes Mitglied
Also es geht darum ich will bzw. muss ein X509 und eine Message in ein PKCS7 Format einhüllen.
Das Zert habe ich mir bereits erstellt. Jetzt möchte ich dieses PKCS7 Format auf meiner Festplatte Lokal speichrn ich könnte natürlich das Return in der Methode ändern nämhlich in PKCS7.


Java:
public static void main(String[] args) throws CertificateException, IOException, NoSuchAlgorithmException, SignatureException {
		// TODO Auto-generated method stub

		
		// Reinladen von CetrifikatsDatei
		FileInputStream in = new FileInputStream("C:\\ssl\\certs\\CoCo.cer");

		CertificateFactory cer = CertificateFactory.getInstance("X.509");
		// Erzeugung des Cert
		X509Certificate myCert = (java.security.cert.X509Certificate) cer
				.generateCertificate(in);
		
		
		// Übergabebpararmeter für die Methode 
		// Encoded liedert verschlüsselte Daten als arrayZurück.
		//byte [] daten = myCert.getEncoded(); 
		
		// Aufrufen der Methode generatePrivateKey erzeugt einen Privaten Schlüssel um die Datei zu signieren.
		PrivateKey mKey = generatePrivateKey();
		
		
		// Die Message 
		
		String nachricht = "Hallo";
		
		byte [] daten = nachricht.getBytes();
		
		
		
		
		// ruf die Methode unterzeichnen auf die 
		// rückgabetyp ist dabei das PKCS 7 Format 
		//PKCS7 p = unterzeichnen(mKey,myCert,daten );
		
		OutputStream out = unterzeichnen(mKey,myCert,daten );
		/*
		// Problem mit speierhn auf Platte nich so leicht.
		System.out.println(out);
		
		FileOutputStream f= new FileOutputStream("C:\\ssl\\certs\\test.pkcs7");
		ObjectOutputStream s = new ObjectOutputStream(out);
		s.writeObject();
		s.close();
		
		/*
		 
		
		
		
	
		// Frage wie als PKCS ausgeben? 
		
		/*
		String source = p.toString();
			byte buf[] = source.getBytes(); 
			
			// Solch ein Cert als p7b Zertifikat angeben. p7s Sigantur  eventuell auch   p7m MIME  Nachricht
			OutputStream fo = new FileOutputStream("C:\\ssl\\certs\\CoCo.pkcs7"); 
		
			
			//i += 2
    		
			for (int i=0; i < buf.length; i++) {
				
				fo.write(buf[i]);
    		
    		}	
		
    	
    		
    		
    	SignerInfo [] info = p.getSignerInfos();
    	
    	for ( int i = 0 ; i < info.length ; i++ ){
    		
    		System.out.println(info[i]);
    		
    	}
    	
    	
    	*/
    	
		
		
		
		
		
		
		
		
		
		
	}


Sorry wegen dem Total unübersichtlichen CODE









Java:
public static  OutputStream unterzeichnen( PrivateKey mKey, X509Certificate myCert,
			byte[] daten) throws FileNotFoundException {

		//FileOutputStream out = new FileOutputStream("C:\\ssl\\certs\\");
		// Ausgabe

		// Sind Variablen die wichtigen Daten beeinhalten.
		OutputStream ausgabe = new ByteArrayOutputStream();
		
		String digestAlgorithm = "SHA1"; // FesteWerte die wir später benötigern
		String signingAlgorithm = "SHA1withRSA"; // der Algom mit dem das ganze
													// Signiert wurde
		PrivateKey priv = mKey; // PrivateKey uns zu anfang noch null.
		X509Certificate x509 = myCert;

		PKCS7 p7 = null;
		
		try {

			AlgorithmId[] digestAlgorithmIds = new AlgorithmId[] { AlgorithmId
					.get(digestAlgorithm) };

			MessageDigest md = MessageDigest.getInstance(digestAlgorithm); // DigestAlgo
																			// SHA1
																			// wird
																			// übergeben.

			md.update(daten); // Daten welche Daten sogennante EinwegHast ist
								// das MessageDigest.
								// die Daten werden sozusgaen zuerst
								// initialisiert. mit Update.

			byte[] digestedContent = md.digest(); // liefert den HashWert an den
													// digestedContent weiter.

			// Wieso dieser teil kommt weiß ich nicht so genau anscheinend
			// liefert es wichtige Infors
			// wie z.B. wann das das Attribute signiert wurd mit welchem Algo
			// usw...
			
			PKCS9Attribute[] authenticatedAttributeList = {
					new PKCS9Attribute(PKCS9Attribute.CONTENT_TYPE_OID,
							ContentInfo.DATA_OID),
					new PKCS9Attribute(PKCS9Attribute.SIGNING_TIME_OID,
							new java.util.Date()),
					new PKCS9Attribute(PKCS9Attribute.MESSAGE_DIGEST_OID,
							digestedContent) };

			// Eine neue Attributsliste wird mit den Attributen erstellt.
			PKCS9Attributes authenticatedAttributes = new PKCS9Attributes(
					authenticatedAttributeList);

			// hier wird das Cert erstellt wobei der keyStore dafür genutzt wird
			// anscheinden.
			
			
			
			//--> nicht notwendig //x509 = (X509Certificate) keyStore.getCertificateChain(alias)[0];
			
			
			// das alias ist der Alias name des Zertifikates unterdem der dieses
			// Cert bekannt ist.
			// daraus wird dann der PrivateKey genommen.
		// Nicht notwendig--> //priv = (PrivateKey) keyStore.getKey(alias, null);

			
			
			// hier wird eine Siganture erzeugt mit dem SignierungsAlgo
			Signature signer = Signature.getInstance(signingAlgorithm);
			// der Private schlüsselwird signiert.
			signer.initSign(priv);
			
			// ???
			signer.update(authenticatedAttributes.getDerEncoding());
			
			
			
			byte[] signedAttributes = signer.sign();
			
			// die ConentInfo wird angelegt fpr das Cert.
			ContentInfo contentInfo = null;
			contentInfo = new ContentInfo(ContentInfo.DATA_OID, new DerValue(
					DerValue.tag_OctetString, daten));

			X509Certificate[] certificates = { x509 };

			java.math.BigInteger serial = x509.getSerialNumber();

			// SignerInformationen anlegen wer das Cert Signiert hat. 
			SignerInfo si = new SignerInfo(new X500Name(x509.getIssuerDN()
					.getName()), serial,
					AlgorithmId.getAlgorithmId(digestAlgorithm),
					authenticatedAttributes, new AlgorithmId(
							AlgorithmId.RSAEncryption_oid), signedAttributes,
					null);	// hier die Informationen zum Signierer der das die Signierzng durchgeführt hat 

			// Die Inforamtionen wweden dann alls Array apgespeichert und dann an das PKCS7 Konstruktor übergeben.
			// Die Infos werden in einem Array gespeichert um Sie an den PKCS7 Konstruktor zu übergeben.
			SignerInfo[] signerInfos = { si };

			p7 = new PKCS7(digestAlgorithmIds, contentInfo, certificates,
					signerInfos); // hier die Erzegung des Cert.

			p7.encodeSignedData(ausgabe);
			
			// Test ob Verifizierung funktioniert.
			try {
				p7.verify();
			} catch (Exception e) {
				System.out.println("Error en validacion:" + e.getMessage());
				e.printStackTrace();
			}

		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}	
			
		

		return ausgabe ; // Rückgabe des PKCS Zerts p7
	}
 
S

SlaterB

Gast
nun gut, ein ByteArrayOutputStream geht gerade so noch, da kann man das Ergebnis nämlich abfragen,
caste auf ByteArrayOutputStream, hole das byte[] mit getBytes(),
die bytes kann man dann ausgeben (mein guter Tipp ;) ). meinetwegen als Objekt speichern, ist serialisierbar,
oder direkt in eine Binärdatei, in einen FileOutputStream schreiben
 

Leno

Bekanntes Mitglied
Sorry hast du vielleicht einen Quellcode mit dem ich das erreichen kann das Casten geht dann so

Java:
ByteArrayOutputStream stream = (ByteArrayOutputStream) out;

und dann wie kann ich dies dann auf Festplatte überführen ?

also als PKCS7 hast du vielleicht eine idee?
 
S

SlaterB

Gast
ich sagte doch
> hole das byte[] mit getBytes(),
?
wie man ein byte[] auf eine Festplatte speichert ist nun absoluter Grundkurs Java, in jedem Lehrbuch ausführlich in einem Kapitel behandelt,
auch sonst überall im Internet zu finden

> also als PKCS7 hast du vielleicht eine idee?
nicht kompliziert denken, mit PKCS7 hat das erstmal nichts mehr zu tun, falls es keine guten Gründe wie spezielles Dateiformat gibt,
deine Aufgabe heißt jetzt 'byte[] auf Festplatte speichern'
 

Nobbs

Mitglied
Falls dus noch brauchst, so würde ichs af die Festplatte schreiben:

Java:
FileOutputStream fos= new FileOutputStream("hier deinen gewünschten speicherort angeben");
fos.write(((ByteArrayOutputStream)out).toByteArray());
fos.close();

try catch muss natürlich noch außenrum.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
J Input/Output Word Datei einlesen, verarbeiten und abspeichern Allgemeine Java-Themen 3
F String in OpenOffice Ods datei abspeichern? Allgemeine Java-Themen 8
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
G Baumstruktur abspeichern Allgemeine Java-Themen 9
A Java - Beim Abspeichern Redundanzen vermeiden! Allgemeine Java-Themen 6
E Bild abspeichern Allgemeine Java-Themen 5
B Input/Output Inventar/Ausrüstung abspeichern (in DB?) Allgemeine Java-Themen 2
B Syntax-Highlighting abspeichern Allgemeine Java-Themen 7
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
I Abspeichern einer txt-Datei Allgemeine Java-Themen 7
W sql Query abspeichern selber variabele hilfe...? Allgemeine Java-Themen 16
X Anwendungsdaten abspeichern ? Allgemeine Java-Themen 12
T abspeichern und laden von objekten in JFrame Allgemeine Java-Themen 2
simcen X509Certificate abspeichern Allgemeine Java-Themen 2
R PDF einlesen und als Bild abspeichern Allgemeine Java-Themen 8
D readChar; wort abspeichern :( Allgemeine Java-Themen 5
L Wie kann ich eine HashMap abspeichern? Allgemeine Java-Themen 3
M Sound in datei abspeichern Allgemeine Java-Themen 3
N Graphics2D als Bild abspeichern Allgemeine Java-Themen 6
V Wie kann ich ein Bild in einem Zip Archiv abspeichern? Allgemeine Java-Themen 3
J Viel Text mit " im Quellcode abspeichern Allgemeine Java-Themen 7
S Projekt als Jar abspeichern! wie? Allgemeine Java-Themen 6
J Verzeichnis aus meinem JAR auslesen und abspeichern. Allgemeine Java-Themen 2
R Datei einlesen, Strings hinzufügen, abspeichern Allgemeine Java-Themen 4
S Text in eine txt-Datei schreiben und abspeichern! Allgemeine Java-Themen 8
N Graphik abspeichern Allgemeine Java-Themen 4
F Image als GIF oder JPEG abspeichern Allgemeine Java-Themen 2
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
Meeresgott Input/Output OutputStream löscht Datei Allgemeine Java-Themen 7
F Jar OutputStream Allgemeine Java-Themen 4
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
D Java Process OutputStream ist null Allgemeine Java-Themen 4
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D zip Dateien schreiben mit in/outputstream Allgemeine Java-Themen 10
S OutputStream via POST senden Allgemeine Java-Themen 4
T OutputStream to InputStream Allgemeine Java-Themen 8
W StringBuilder effektiv auf OutputStream schreiben Allgemeine Java-Themen 3
Landei CipherInput/OutputStream-Problem Allgemeine Java-Themen 2
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S outputstream über fileUrl Allgemeine Java-Themen 15
L Problem mit dem OutputStream eines Prozesses Allgemeine Java-Themen 9
G OutputStream to System.out Allgemeine Java-Themen 35
I input-/outputstream Allgemeine Java-Themen 6
Junktyz In Writer und Outputstream wird teilweise nicht geschrieben Allgemeine Java-Themen 3
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
H Problem mit OutputStream Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
D Cipher(In)OutputStream Allgemeine Java-Themen 3
R Ladebalken für einen Outputstream. Allgemeine Java-Themen 10
J Binärdateien mit Input/Outputstream lesen und schreiben Allgemeine Java-Themen 3
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
T Problem mit Outputstream? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben