Package de.dfncert.tools
Class Cryptography
- java.lang.Object
-
- de.dfncert.tools.Cryptography
-
public class Cryptography extends java.lang.Object
Diese Klasse stellt einige statische Methoden für häufig verwendete kryptografische Aufgaben bereit.
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.String
createPKCS10(java.lang.String subject, java.security.PublicKey publickey, java.security.PrivateKey privatekey)
Erstellt einen PKCS#10-Antrag.static java.lang.String
createPKCS10(java.lang.String subject, java.security.PublicKey publickey, java.security.PrivateKey privatekey, java.lang.String provider)
Erstellt einen neuen PKCS#10-Antrag und liefert diesen im PEM-Format.static java.lang.String
createPKCS7Encrypted(byte[] data, java.security.cert.X509Certificate[] certs)
Erstellt einen PKCS#7-Container, der die Daten ausdata
mit allen öffentlichen Schlüsseln aus den Zertifikatencerts
verschlüsselt.static java.lang.String
createPKCS7Signed(byte[] text, java.security.PrivateKey privatekey, java.security.cert.X509Certificate certificate)
Erstellt ein PKCS#7 Container mit einer losglösten (detached) Signatur übertext
.static byte[]
decryptPKCS7(java.lang.String base64, java.security.cert.X509Certificate cert, java.security.PrivateKey key)
Entschlüsselung mit dem StandardproviderSunJCE
.static byte[]
decryptPKCS7(java.lang.String base64, java.security.cert.X509Certificate cert, java.security.PrivateKey key, java.lang.String provider)
Entschlüsselt die in einen PKCS#7-Container eingebetteten verschlüsselten Daten.static java.security.cert.X509Certificate
getCertificateFromPEM(java.lang.String pem)
Erstellt einX509Certificate
-Objekt aus einem PEM-Zertifikat.static java.security.cert.X509Certificate
getFirstCertificateWithKeyFormPKCS12(java.lang.String filename, java.lang.String password)
Liefert das erste Zertifikat aus einer PKCS#12-Datei, zu dem ein privater Schlüssel existiert.static java.security.PrivateKey
getFirstKeyFormPKCS12(java.lang.String filename, java.lang.String password)
Liefert den ersten privaten Schlüssel, der in einer PKCS#12-Struktur gefunden wird.static java.lang.String
getPEMFromCertificate(java.security.cert.X509Certificate cert)
Wandelt ein Zertifikatobjekt in das PEM-Format um.static java.security.KeyPair
getPrivateKey(byte[] key)
Wandelt einen privaten Schlüssel in ein Java-Object um.static java.lang.String
sha1(byte[] input)
Kalkuliert einen SHA1 Hash-Wert fürinput
.static java.lang.String
sha1(byte[] input, java.lang.String bytesSeparator, boolean upperCase)
Kalkuliert einen SHA1 Hash-Wert fürinput
und liefert diesen in angegebener Formatiertung.
-
-
-
Method Detail
-
createPKCS10
public static java.lang.String createPKCS10(java.lang.String subject, java.security.PublicKey publickey, java.security.PrivateKey privatekey) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.InvalidKeyException, java.security.SignatureException, java.io.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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.security.NoSuchProviderException
- Fehlerweiterleitungjava.security.InvalidKeyException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitungjava.security.SignatureException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung- See Also:
createPKCS10(java.lang.String, java.security.PublicKey, java.security.PrivateKey, java.lang.String)
-
createPKCS10
public static java.lang.String createPKCS10(java.lang.String subject, java.security.PublicKey publickey, java.security.PrivateKey privatekey, java.lang.String provider) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.InvalidKeyException, java.security.SignatureException, java.io.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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.security.NoSuchProviderException
- Fehlerweiterleitungjava.security.InvalidKeyException
- Fehlerweiterleitungjava.security.SignatureException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitung
-
sha1
public static java.lang.String sha1(byte[] input) throws java.security.NoSuchAlgorithmException
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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitung
-
sha1
public static java.lang.String sha1(byte[] input, java.lang.String bytesSeparator, boolean upperCase) throws java.security.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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitung
-
createPKCS7Signed
public static java.lang.String createPKCS7Signed(byte[] text, java.security.PrivateKey privatekey, java.security.cert.X509Certificate certificate) throws java.security.NoSuchAlgorithmException, java.security.cert.CertStoreException, org.bouncycastle.cms.CMSException, java.security.NoSuchProviderException, java.security.InvalidAlgorithmParameterException, java.io.IOException, org.bouncycastle.operator.OperatorCreationException, java.security.cert.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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.security.cert.CertStoreException
- Fehlerweiterleitungorg.bouncycastle.cms.CMSException
- Fehlerweiterleitungjava.security.NoSuchProviderException
- Fehlerweiterleitungjava.security.InvalidAlgorithmParameterException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitungorg.bouncycastle.operator.OperatorCreationException
- Fehlerweiterleitungjava.security.cert.CertificateEncodingException
- Fehlerweiterleitung
-
createPKCS7Encrypted
public static java.lang.String createPKCS7Encrypted(byte[] data, java.security.cert.X509Certificate[] certs) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, org.bouncycastle.cms.CMSException, java.io.IOException, java.security.cert.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:
java.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.security.NoSuchProviderException
- Fehlerweiterleitungorg.bouncycastle.cms.CMSException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitungjava.security.cert.CertificateEncodingException
- Fehlerweiterleitung
-
decryptPKCS7
public static byte[] decryptPKCS7(java.lang.String base64, java.security.cert.X509Certificate cert, java.security.PrivateKey key) throws org.bouncycastle.cms.CMSException, java.lang.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
- Fehlerweiterleitungjava.lang.Exception
- See Also:
decryptPKCS7(java.lang.String, java.security.cert.X509Certificate, java.security.PrivateKey, java.lang.String)
-
decryptPKCS7
public static byte[] decryptPKCS7(java.lang.String base64, java.security.cert.X509Certificate cert, java.security.PrivateKey key, java.lang.String provider) throws org.bouncycastle.cms.CMSException, java.lang.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
- Fehlerweiterleitungjava.lang.Exception
-
getCertificateFromPEM
public static java.security.cert.X509Certificate getCertificateFromPEM(java.lang.String pem) throws java.security.cert.CertificateException, java.io.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:
java.security.cert.CertificateException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitung
-
getPEMFromCertificate
public static java.lang.String getPEMFromCertificate(java.security.cert.X509Certificate cert) throws java.io.IOException
Wandelt ein Zertifikatobjekt in das PEM-Format um.- Parameters:
cert
- Eingabezertifikat- Returns:
- Ausgabe im PEM-Format
- Throws:
java.io.IOException
- Fehlerweiterleitung
-
getPrivateKey
public static java.security.KeyPair getPrivateKey(byte[] key) throws java.io.IOException
Wandelt einen privaten Schlüssel in ein Java-Object um.- Parameters:
key
- Eingabe als Byte-Array- Returns:
- Schlüsselobject
- Throws:
java.io.IOException
- Fehlerweiterleitung
-
getFirstKeyFormPKCS12
public static java.security.PrivateKey getFirstKeyFormPKCS12(java.lang.String filename, java.lang.String password) throws java.security.KeyStoreException, java.io.FileNotFoundException, java.io.IOException, java.security.NoSuchAlgorithmException, java.security.cert.CertificateException, java.security.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:
java.security.KeyStoreException
- Fehlerweiterleitungjava.security.cert.CertificateException
- Fehlerweiterleitungjava.io.FileNotFoundException
- Fehlerweiterleitungjava.security.UnrecoverableKeyException
- Fehlerweiterleitungjava.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.io.IOException
-
getFirstCertificateWithKeyFormPKCS12
public static java.security.cert.X509Certificate getFirstCertificateWithKeyFormPKCS12(java.lang.String filename, java.lang.String password) throws java.security.KeyStoreException, java.io.FileNotFoundException, java.io.IOException, java.security.NoSuchAlgorithmException, java.security.cert.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:
java.security.KeyStoreException
- Fehlerweiterleitungjava.io.FileNotFoundException
- Fehlerweiterleitungjava.io.IOException
- Fehlerweiterleitungjava.security.NoSuchAlgorithmException
- Fehlerweiterleitungjava.security.cert.CertificateException
- Fehlerweiterleitung
-
-