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 StringcreatePKCS10(String subject, PublicKey publickey, PrivateKey privatekey) Erstellt einen PKCS#10-Antrag.static StringcreatePKCS10(String subject, PublicKey publickey, PrivateKey privatekey, String provider) Erstellt einen neuen PKCS#10-Antrag und liefert diesen im PEM-Format.static StringcreatePKCS7Encrypted(byte[] data, X509Certificate[] certs) Erstellt einen PKCS#7-Container, der die Daten ausdatamit allen öffentlichen Schlüsseln aus den Zertifikatencertsverschlüsselt.static StringcreatePKCS7Signed(byte[] text, PrivateKey privatekey, X509Certificate certificate) Erstellt ein PKCS#7 Container mit einer losglösten (detached) Signatur übertext.static StringcreatePKCS7SignedWithChain(byte[] text, PrivateKey privatekey, X509Certificate certificate, org.bouncycastle.cert.jcajce.JcaCertStore store) 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 X509CertificateErstellt einX509Certificate-Objekt aus einem PEM-Zertifikat.static X509CertificategetFirstCertificateWithKeyFormPKCS12(String filename, String password) Liefert das erste Zertifikat aus einer PKCS#12-Datei, zu dem ein privater Schlüssel existiert.static PrivateKeygetFirstKeyFormPKCS12(String filename, String password) Liefert den ersten privaten Schlüssel, der in einer PKCS#12-Struktur gefunden wird.static StringWandelt ein Zertifikatobjekt in das PEM-Format um.static KeyPairgetPrivateKey(byte[] key) Wandelt einen privaten Schlüssel in ein Java-Object um.static StringgetSignatureAlgorithm(Key key) Gibt den passenden Signaturalgorithmus zurück, basierend auf dem PublicKey Algorithmus und bei EC und EdDSA auf den Kurven bzw. der Keysize.static Stringsha1(byte[] input) Kalkuliert einen SHA1 Hash-Wert fürinput.static StringKalkuliert einen SHA1 Hash-Wert fürinputund 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 org.bouncycastle.operator.OperatorCreationException, IOException 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 MethodeDFNCERTPublicals Parameter übergeben werden. Die Selbstsignatur des Antrags wird bei einem RSA-Schlüssel mitSHA256withRSAerstellt. WennSHA256withRSAnicht vom Provider unterstützt wird, wirdSHA1withRSAverwendet. Bei einem EC-Schlüssel mitsecp256r1Kurve wirdSHA256withECDSA, beisecp384r1KurveSHA384withECDSAund beisecp521r1Kurve wirdSHA512withECDSAverwendet. Bei einem EdEc-Schlüssel wird entwederEd25519oderEd448verwendet.- 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:
IOException- 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ürinputund 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üsselprivatekeyverwendet und das zugehörige Zertifikatcertificateals 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
-
createPKCS7SignedWithChain
public static String createPKCS7SignedWithChain(byte[] text, PrivateKey privatekey, X509Certificate certificate, org.bouncycastle.cert.jcajce.JcaCertStore store) 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üsselprivatekeyverwendet und das zugehörige Zertifikatcertificateals Unterzeichner-Zertifikat mit in die PKCS#7-Struktur eingebunden. Das Ergebnis wird im PEM-Format geliefert.- Parameters:
text- Zu signierende Datenprivatekey- Unterschrift Privater Schlüsselstore- Zertifiakts-Store mit Unterschrift Zertifikat und ggf. Zertifikatskette- 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 ausdatamit allen öffentlichen Schlüsseln aus den Zertifikatencertsverschlü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, wirdnullzurü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
-
getSignatureAlgorithm
Gibt den passenden Signaturalgorithmus zurück, basierend auf dem PublicKey Algorithmus und bei EC und EdDSA auf den Kurven bzw. der Keysize. Z.b. wäre es bei secp256r1 SHA256withECDSA- Parameters:
key-- Returns:
- passender Signaturalgorithmus als String
-