Package de.dfncert.tools
Klasse Cryptography
java.lang.Object
de.dfncert.tools.Cryptography
Diese Klasse stellt einige statische Methoden für häufig verwendete
kryptografische Aufgaben bereit.
- Autor:
- moennich
-
Methodenübersicht
Modifizierer und TypMethodeBeschreibungstatic 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 String
createPKCS7SignedWithChain
(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 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
getSignatureAlgorithm
(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 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.
-
Methodendetails
-
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".- Parameter:
subject
- Subject DNpublickey
- Öffentlicher Schlüsselprivatekey
- Privater Schlüssel- Gibt zurück:
- PKCS#10-Antrag im PEM-Format
- Löst aus:
NoSuchAlgorithmException
- FehlerweiterleitungNoSuchProviderException
- FehlerweiterleitungInvalidKeyException
- FehlerweiterleitungIOException
- FehlerweiterleitungSignatureException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung- Siehe auch:
-
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 MethodeDFNCERTPublic
als Parameter übergeben werden. Die Selbstsignatur des Antrags wird bei einem RSA-Schlüssel mitSHA256withRSA
erstellt. WennSHA256withRSA
nicht vom Provider unterstützt wird, wirdSHA1withRSA
verwendet. Bei einem EC-Schlüssel mitsecp256r1
Kurve wirdSHA256withECDSA
, beisecp384r1
KurveSHA384withECDSA
und beisecp521r1
Kurve wirdSHA512withECDSA
verwendet. Bei einem EdEc-Schlüssel wird entwederEd25519
oderEd448
verwendet.- Parameter:
subject
- Subject DNpublickey
- Öffentlicher Schlüsselprivatekey
- Privater Schlüsselprovider
- Provider für PKCS#10-Signatur, null für Standard- Gibt zurück:
- PKCS10-Antrag im PEM Format
- Löst aus:
IOException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung
-
sha1
Kalkuliert einen SHA1 Hash-Wert fürinput
. Liefert den Wert als hexadezimalen String in Kleinbuchstaben.- Parameter:
input
- Eingabedaten- Gibt zurück:
- SHA1 Hash-Eert als hexadezimaler String, Kleinbuchstaben
- Löst aus:
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.- Parameter:
input
- EingabedatenbytesSeparator
- Delimiter zwischen einzelnen Bytes (z.B. ":")upperCase
- Großbuchstaben?- Gibt zurück:
- Hashwert als Hex-ASCII
- Löst aus:
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.- Parameter:
text
- Zu signierende Datenprivatekey
- Unterschrift Privater Schlüsselcertificate
- Unterschrift Zertifikat- Gibt zurück:
- Signatur im PEM-Format
- Löst aus:
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üsselprivatekey
verwendet und das zugehörige Zertifikatcertificate
als Unterzeichner-Zertifikat mit in die PKCS#7-Struktur eingebunden. Das Ergebnis wird im PEM-Format geliefert.- Parameter:
text
- Zu signierende Datenprivatekey
- Unterschrift Privater Schlüsselstore
- Zertifiakts-Store mit Unterschrift Zertifikat und ggf. Zertifikatskette- Gibt zurück:
- Signatur im PEM-Format
- Löst aus:
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.- Parameter:
data
- Zu verschlüsselnde Datencerts
- Empfänger-Zertifikate- Gibt zurück:
- PKCS#7 im PEM-Format
- Löst aus:
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
.- Parameter:
base64
- PKCS#7-Struktur im PEM-Formatcert
- Entschlüsselungszertifikatkey
- Entschlüsselungsschlüssel- Gibt zurück:
- Entschlüsselte Daten
- Löst aus:
org.bouncycastle.cms.CMSException
- FehlerweiterleitungException
- Siehe auch:
-
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.- Parameter:
base64
- PKCS#7 in DER-Formatcert
- Zertifikat des Entschlüsselerskey
- PrivateKey des Entschlüsselersprovider
- Zu verwendender Kryptoprovider, z.B. "SunJCE"- Gibt zurück:
- entschlüsselte Daten
- Löst aus:
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.- Parameter:
pem
- Zertifikat im PEM-Format- Gibt zurück:
- Zertifikatobjekt
- Löst aus:
CertificateException
- FehlerweiterleitungIOException
- Fehlerweiterleitung
-
getPEMFromCertificate
Wandelt ein Zertifikatobjekt in das PEM-Format um.- Parameter:
cert
- Eingabezertifikat- Gibt zurück:
- Ausgabe im PEM-Format
- Löst aus:
IOException
- Fehlerweiterleitung
-
getPrivateKey
Wandelt einen privaten Schlüssel in ein Java-Object um.- Parameter:
key
- Eingabe als Byte-Array- Gibt zurück:
- Schlüsselobject
- Löst aus:
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.- Parameter:
filename
- Dateiname der PKCS#12-Dateipassword
- Passwort der PKCS#12-Datei- Gibt zurück:
- Erster gefundener privater Schlüssel
- Löst aus:
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.- Parameter:
filename
- Dateiname der PKCS#12-Dateipassword
- Passwort der PKCS#12-Datei- Gibt zurück:
- Erstes Zertifikat zu dem ein privater Schlüssel existiert
- Löst aus:
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- Parameter:
key
-- Gibt zurück:
- passender Signaturalgorithmus als String
-