Package de.dfncert.tools
Class Cryptography
java.lang.Object
de.dfncert.tools.Cryptography
Diese Klasse stellt einige statische Methoden für häufig verwendete
kryptografische Aufgaben bereit.
- Author:
- moennich
-
Method Summary
Modifier and TypeMethodDescriptionstatic String
createPKCS10
(String subject, PublicKey publickey, PrivateKey privatekey) Erstellt einen PKCS#10-Antrag.static String
createPKCS10
(String subject, PublicKey publickey, PrivateKey privatekey, String provider) Erstellt einen neuen PKCS#10-Antrag und liefert diesen im PEM-Format.static String
createPKCS7Encrypted
(byte[] data, X509Certificate[] certs) Erstellt einen PKCS#7-Container, der die Daten ausdata
mit allen öffentlichen Schlüsseln aus den Zertifikatencerts
verschlüsselt.static String
createPKCS7Signed
(byte[] text, PrivateKey privatekey, X509Certificate certificate) Erstellt ein PKCS#7 Container mit einer losglösten (detached) Signatur übertext
.static byte[]
decryptPKCS7
(String base64, X509Certificate cert, PrivateKey key) Entschlüsselung mit dem StandardproviderSunJCE
.static byte[]
decryptPKCS7
(String base64, X509Certificate cert, PrivateKey key, String provider) Entschlüsselt die in einen PKCS#7-Container eingebetteten verschlüsselten Daten.static X509Certificate
Erstellt einX509Certificate
-Objekt aus einem PEM-Zertifikat.static X509Certificate
getFirstCertificateWithKeyFormPKCS12
(String filename, String password) Liefert das erste Zertifikat aus einer PKCS#12-Datei, zu dem ein privater Schlüssel existiert.static PrivateKey
getFirstKeyFormPKCS12
(String filename, String password) Liefert den ersten privaten Schlüssel, der in einer PKCS#12-Struktur gefunden wird.static String
Wandelt ein Zertifikatobjekt in das PEM-Format um.static KeyPair
getPrivateKey
(byte[] key) Wandelt einen privaten Schlüssel in ein Java-Object um.static String
sha1
(byte[] input) Kalkuliert einen SHA1 Hash-Wert fürinput
.static String
Kalkuliert einen SHA1 Hash-Wert fürinput
und liefert diesen in angegebener Formatiertung.
-
Method Details
-
createPKCS10
public static String createPKCS10(String subject, PublicKey publickey, PrivateKey privatekey) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException, org.bouncycastle.operator.OperatorCreationException Erstellt einen PKCS#10-Antrag. Der Provider für die Selbstsignatur des Antrags ist hier "SunRsaSign".- Parameters:
subject
- Subject DNpublickey
- Öffentlicher Schlüsselprivatekey
- Privater Schlüssel- Returns:
- PKCS#10-Antrag im PEM-Format
- Throws:
NoSuchAlgorithmException
- FehlerweiterleitungNoSuchProviderException
- FehlerweiterleitungInvalidKeyException
- FehlerweiterleitungIOException
- FehlerweiterleitungSignatureException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung- See Also:
-
createPKCS10
public static String createPKCS10(String subject, PublicKey publickey, PrivateKey privatekey, String provider) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException, org.bouncycastle.operator.OperatorCreationException Erstellt einen neuen PKCS#10-Antrag und liefert diesen im PEM-Format. Benötigt werden dazu ein öffentlicher und ein privater Schlüssel, sowie der Subject DN als String. Erweiterte Attribute in dem Antrag (z.B. Alias-Namen) werden momentan nicht unterstützt. Diese können aber über die MethodeDFNCERTPublic
als Parameter übergeben werden. Die Selbstsignatur des Antrags wird mitSHA256withRSA
erstellt. WennSHA256withRSA
nicht vom Provider unterstützt wird, wirdSHA1withRSA
verwendet.- Parameters:
subject
- Subject DNpublickey
- Öffentlicher Schlüsselprivatekey
- Privater Schlüsselprovider
- Provider für PKCS#10-Signatur, null für Standard- Returns:
- PKCS10-Antrag im PEM Format
- Throws:
NoSuchAlgorithmException
- FehlerweiterleitungNoSuchProviderException
- FehlerweiterleitungInvalidKeyException
- FehlerweiterleitungSignatureException
- FehlerweiterleitungIOException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung
-
sha1
Kalkuliert einen SHA1 Hash-Wert fürinput
. Liefert den Wert als hexadezimalen String in Kleinbuchstaben.- Parameters:
input
- Eingabedaten- Returns:
- SHA1 Hash-Eert als hexadezimaler String, Kleinbuchstaben
- Throws:
NoSuchAlgorithmException
- Fehlerweiterleitung
-
sha1
public static String sha1(byte[] input, String bytesSeparator, boolean upperCase) throws NoSuchAlgorithmException Kalkuliert einen SHA1 Hash-Wert fürinput
und liefert diesen in angegebener Formatiertung.- Parameters:
input
- EingabedatenbytesSeparator
- Delimiter zwischen einzelnen Bytes (z.B. ":")upperCase
- Großbuchstaben?- Returns:
- Hashwert als Hex-ASCII
- Throws:
NoSuchAlgorithmException
- Fehlerweiterleitung
-
createPKCS7Signed
public static String createPKCS7Signed(byte[] text, PrivateKey privatekey, X509Certificate certificate) throws NoSuchAlgorithmException, CertStoreException, org.bouncycastle.cms.CMSException, NoSuchProviderException, InvalidAlgorithmParameterException, IOException, org.bouncycastle.operator.OperatorCreationException, CertificateEncodingException Erstellt ein PKCS#7 Container mit einer losglösten (detached) Signatur übertext
. Dabei wird der angegebene private Schlüsselprivatekey
verwendet und das zugehörige Zertifikatcertificate
als Unterzeichner-Zertifikat mit in die PKCS#7-Struktur eingebunden. Das Ergebnis wird im PEM-Format geliefert.- Parameters:
text
- Zu signierende Datenprivatekey
- Unterschrift Privater Schlüsselcertificate
- Unterschrift Zertifikat- Returns:
- Signatur im PEM-Format
- Throws:
NoSuchAlgorithmException
- FehlerweiterleitungCertStoreException
- Fehlerweiterleitungorg.bouncycastle.cms.CMSException
- FehlerweiterleitungNoSuchProviderException
- FehlerweiterleitungInvalidAlgorithmParameterException
- FehlerweiterleitungIOException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- FehlerweiterleitungCertificateEncodingException
- Fehlerweiterleitung
-
createPKCS7Encrypted
public static String createPKCS7Encrypted(byte[] data, X509Certificate[] certs) throws NoSuchAlgorithmException, NoSuchProviderException, org.bouncycastle.cms.CMSException, IOException, CertificateEncodingException Erstellt einen PKCS#7-Container, der die Daten ausdata
mit allen öffentlichen Schlüsseln aus den Zertifikatencerts
verschlüsselt.- Parameters:
data
- Zu verschlüsselnde Datencerts
- Empfänger-Zertifikate- Returns:
- PKCS#7 im PEM-Format
- Throws:
NoSuchAlgorithmException
- FehlerweiterleitungNoSuchProviderException
- Fehlerweiterleitungorg.bouncycastle.cms.CMSException
- FehlerweiterleitungIOException
- FehlerweiterleitungCertificateEncodingException
- Fehlerweiterleitung
-
decryptPKCS7
public static byte[] decryptPKCS7(String base64, X509Certificate cert, PrivateKey key) throws org.bouncycastle.cms.CMSException, Exception Entschlüsselung mit dem StandardproviderSunJCE
.- Parameters:
base64
- PKCS#7-Struktur im PEM-Formatcert
- Entschlüsselungszertifikatkey
- Entschlüsselungsschlüssel- Returns:
- Entschlüsselte Daten
- Throws:
org.bouncycastle.cms.CMSException
- FehlerweiterleitungException
- See Also:
-
decryptPKCS7
public static byte[] decryptPKCS7(String base64, X509Certificate cert, PrivateKey key, String provider) throws org.bouncycastle.cms.CMSException, Exception Entschlüsselt die in einen PKCS#7-Container eingebetteten verschlüsselten Daten. Der richtige Schlüssel wird dabei anhand der Seriennummer und des Ausstellers des Entschlüsselungszertifikats ermittelt.- Parameters:
base64
- PKCS#7 in DER-Formatcert
- Zertifikat des Entschlüsselerskey
- PrivateKey des Entschlüsselersprovider
- Zu verwendender Kryptoprovider, z.B. "SunJCE"- Returns:
- entschlüsselte Daten
- Throws:
org.bouncycastle.cms.CMSException
- FehlerweiterleitungException
-
getCertificateFromPEM
public static X509Certificate getCertificateFromPEM(String pem) throws CertificateException, IOException Erstellt einX509Certificate
-Objekt aus einem PEM-Zertifikat. Die Eingabe muss im PEM-Format mit Header (BEGIN CERTIFICATE) und Footer (END CERTIFICATE) erfolgen.- Parameters:
pem
- Zertifikat im PEM-Format- Returns:
- Zertifikatobjekt
- Throws:
CertificateException
- FehlerweiterleitungIOException
- Fehlerweiterleitung
-
getPEMFromCertificate
Wandelt ein Zertifikatobjekt in das PEM-Format um.- Parameters:
cert
- Eingabezertifikat- Returns:
- Ausgabe im PEM-Format
- Throws:
IOException
- Fehlerweiterleitung
-
getPrivateKey
Wandelt einen privaten Schlüssel in ein Java-Object um.- Parameters:
key
- Eingabe als Byte-Array- Returns:
- Schlüsselobject
- Throws:
IOException
- Fehlerweiterleitung
-
getFirstKeyFormPKCS12
public static PrivateKey getFirstKeyFormPKCS12(String filename, String password) throws KeyStoreException, FileNotFoundException, IOException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException Liefert den ersten privaten Schlüssel, der in einer PKCS#12-Struktur gefunden wird. Dazu werden die Alias-Namen in der Reihenfolge ihres Auftretens durchlaufen und der erste Eintrag, der einen Schlüssel enthält zurückgeliefert. Falls kein privater Schlüssel gefunden wurde, wirdnull
zurückgegeben.- Parameters:
filename
- Dateiname der PKCS#12-Dateipassword
- Passwort der PKCS#12-Datei- Returns:
- Erster gefundener privater Schlüssel
- Throws:
KeyStoreException
- FehlerweiterleitungCertificateException
- FehlerweiterleitungFileNotFoundException
- FehlerweiterleitungUnrecoverableKeyException
- FehlerweiterleitungNoSuchAlgorithmException
- FehlerweiterleitungIOException
-
getFirstCertificateWithKeyFormPKCS12
public static X509Certificate getFirstCertificateWithKeyFormPKCS12(String filename, String password) throws KeyStoreException, FileNotFoundException, IOException, NoSuchAlgorithmException, CertificateException Liefert das erste Zertifikat aus einer PKCS#12-Datei, zu dem ein privater Schlüssel existiert. Dazu werden alle Alias-Namen durchlaufen und das erste Zertifikat, zu dem ein Schlüssel gehört, zurückgegeben.- Parameters:
filename
- Dateiname der PKCS#12-Dateipassword
- Passwort der PKCS#12-Datei- Returns:
- Erstes Zertifikat zu dem ein privater Schlüssel existiert
- Throws:
KeyStoreException
- FehlerweiterleitungFileNotFoundException
- FehlerweiterleitungIOException
- FehlerweiterleitungNoSuchAlgorithmException
- FehlerweiterleitungCertificateException
- Fehlerweiterleitung
-