Verschlüsselung

lumo

Top Contributor
Hallo leute,

ich habe folgende aufgabe und weiss nicht genau wie ich das lösen soll.
es geht um lizensierung eines programmes.

der client bekommt von mir eine serial, mit der er sein produkt aktivieren kann.
bei der aktivierung generiert der server eine key-file
in der diverse daten verschlüsselt gespeichert werden
nun muss am client diese datei entschlüsselt werden um die daten im programm nutzen zu können.
ich möchte das ganze verschlüsseln, damit der user nicht selbst an der file rumdreht...

wie/welche art der verschlüsselung ist dazu geeignet?
mein problem sehe ich darin, den key zum entschlüsseln so zu speichern dass ihn nicht so schnell jemand findet... (text in ner class file ist dazu nichts)
 

c_sidi90

Top Contributor
Wenn die entschlüsselung durch den Client erfolgen soll, kann man die Daten ohnehin manipulieren. Ich würde die Entschlüsselung auch Serverseitig lösen, ist aufjedenfall sicherer, jedoch hängt das auch vom Anwendungsgebiet ab.
 

lumo

Top Contributor
habe mir jetzt mal ein kleines programm zusammengestellt um private und public keys zu erstellen...
aber irgendwie will der nicht so wie ich das will... warum?

UPDATE:
error is in line 136
it should be:
Java:
		return new KeyPair(getPublicKey(path + PUBLIC_KEY_FILE),
				getPrivateKey(path + PRIVATE_KEY_FILE));

Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.EncodedKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import org.apache.commons.codec.binary.Base64;

public class SecurityLumo {
	public static String SIG_FILE_EXTENSION = ".sig";
	public static String HASH_FILE_EXTENSION = ".crc";
	public static String KEY_FILE_EXTENSION = ".key";

	public static String PUBLIC_KEY_FILE = "public" + KEY_FILE_EXTENSION;
	public static String PRIVATE_KEY_FILE = "private" + KEY_FILE_EXTENSION;

	public static String DIGEST_ALGORITHM = "SHA1";
	public static String ENCRYPTION_ALGORITHM = "DSA"; // DSA would be better
	public static String SIGNATURE_ALGORITHM = DIGEST_ALGORITHM + "with"
			+ ENCRYPTION_ALGORITHM;

	public static void main(String args[]) {

		SecurityLumo sec = new SecurityLumo();
		try {
			String path = "D:\\JAVA\\LicenseWorkspace\\licensing\\src\\keys\\";

			KeyPairGenerator keyGen = KeyPairGenerator
					.getInstance(ENCRYPTION_ALGORITHM);

			keyGen.initialize(1024);
			KeyPair generatedKeyPair = keyGen.genKeyPair();

			System.out.println("Generated Key Pair");
			sec.printKeyPair(generatedKeyPair);
			sec.saveKeyPair(path, generatedKeyPair);

			KeyPair loadedKeyPair = sec.loadKeyPair(path, ENCRYPTION_ALGORITHM);
			System.out.println("Loaded Key Pair");
			sec.printKeyPair(loadedKeyPair);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
	}

	private void printKeyPair(KeyPair keyPair) {
		PublicKey pub = keyPair.getPublic();
		System.out.println("Public Key: " + getHexString(pub.getEncoded()));

		PrivateKey priv = keyPair.getPrivate();
		System.out.println("Private Key: " + getHexString(priv.getEncoded()));
	}

	private String getHexString(byte[] b) {
		String result = "";
		for (int i = 0; i < b.length; i++) {
			result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
		}
		return result;
	}

	public void saveKeyPair(String path, KeyPair keyPair) throws IOException {
		putPrivateKey(path, keyPair.getPrivate());
		putPublicKey(path, keyPair.getPublic());
	}

	public void putPrivateKey(String path, PrivateKey privateKey)
			throws IOException {
		// Store Private Key.
		EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(
				Base64.encodeBase64(privateKey.getEncoded()));
		FileOutputStream fos = new FileOutputStream(path + PRIVATE_KEY_FILE);
		fos.write(privKeySpec.getEncoded());
		fos.close();
	}

	public PrivateKey getPrivateKey(String fileName)
			throws NoSuchAlgorithmException, IOException,
			InvalidKeySpecException {
		KeyFactory keyFactory = KeyFactory.getInstance(ENCRYPTION_ALGORITHM);
		// Read Private Key.
		File filePrivateKey = new File(fileName);
		FileInputStream fis = new FileInputStream(
				filePrivateKey.getAbsolutePath());
		byte[] encodedPrivateKey = new byte[(int) filePrivateKey.length()];
		fis.read(encodedPrivateKey);
		fis.close();

		PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(
				Base64.decodeBase64(encodedPrivateKey));
		PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
		return privateKey;
	}

	public void putPublicKey(String path, PublicKey publicKey)
			throws IOException {
		// Store Public Key.
		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(
				Base64.encodeBase64(publicKey.getEncoded()));
		FileOutputStream fos = new FileOutputStream(path + PUBLIC_KEY_FILE);
		fos.write(x509EncodedKeySpec.getEncoded());
		fos.close();
	}

	public PublicKey getPublicKey(String fileName)
			throws InvalidKeySpecException, NoSuchAlgorithmException,
			IOException, NoSuchProviderException {
		// Read Public Key.
		File filePublicKey = new File(fileName);
		FileInputStream fis = new FileInputStream(
				filePublicKey.getAbsolutePath());
		byte[] encodedPublicKey = new byte[(int) filePublicKey.length()];
		fis.read(encodedPublicKey);
		fis.close();

		KeyFactory keyFactory = KeyFactory.getInstance(ENCRYPTION_ALGORITHM);
		X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(
				Base64.decodeBase64(encodedPublicKey));
		PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
		return publicKey;
	}

	public KeyPair loadKeyPair(String path, String algorithm)
			throws IOException, NoSuchAlgorithmException,
			InvalidKeySpecException, NoSuchProviderException {
		return new KeyPair(getPublicKey(path + PRIVATE_KEY_FILE),
				getPrivateKey(path + PRIVATE_KEY_FILE));
	}
}

er motzt immer mit:
Code:
Generated Key Pair
Public Key: 308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100c8a55f84a3ede208e9c4c59a6fc94f62a1f49286c9dc26db3e3ffb9377de32e6df0aff4eaf76cd3155b36d80d22b5fc4c10fb1dd7044c27d31017d22f08e7ed660b9925290916114e7dd359530ba5761ffa8b9009520d487db8d3204a50635c896e614c6dd97870e908dd66a14d5747b22b806751e8a26b80c36f7b941e9c219
Private Key: 3082014b0201003082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a041602146f0494fb15cb761466baae95bf122a87ab981664
java.security.spec.InvalidKeySpecException: Inappropriate key specification: IOException: algid parse error, not a sequence
	at sun.security.provider.DSAKeyFactory.engineGeneratePublic(Unknown Source)
	at java.security.KeyFactory.generatePublic(Unknown Source)
	at lumo.tests.SecurityLumo.getPublicKey(SecurityLumo.java:131)
	at lumo.tests.SecurityLumo.loadKeyPair(SecurityLumo.java:138)
	at lumo.tests.SecurityLumo.main(SecurityLumo.java:49)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
X Verschlüsselung Allgemeine Java-Themen 18
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
R Verschlüsselung falsch Allgemeine Java-Themen 3
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
D AES Verschlüsselung / Wirklich AES 128-Bit? Allgemeine Java-Themen 4
I Best Practice Verschlüsselung mit SALT Allgemeine Java-Themen 4
A Mehrfache XOR Verschlüsselung Allgemeine Java-Themen 11
Thallius Moderne sichere synchrone Verschlüsselung mit Java? Allgemeine Java-Themen 3
Ananaskirsche Verschlüsselung mit AES Allgemeine Java-Themen 4
E Verschlüsselung Allgemeine Java-Themen 4
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
S Key (für AES-Verschlüsselung) aus String Allgemeine Java-Themen 4
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
K Problem mit Salted - Verschlüsselung Allgemeine Java-Themen 4
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
J Verschlüsselung von Text? Allgemeine Java-Themen 2
K Vigenere- Verschlüsselung Allgemeine Java-Themen 13
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
T AES-Verschlüsselung mit eigenem 256 Bit Schlüssel Allgemeine Java-Themen 12
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
M Verschlüsselung mit Cipher Allgemeine Java-Themen 5
B XOR Verschlüsselung Allgemeine Java-Themen 7
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
H Verschlüsselung mit Blowfish Allgemeine Java-Themen 14
C Interpreter-Fehler AES verschlüsselung mit MD5 key Allgemeine Java-Themen 6
S AES Verschlüsselung - File Headers korrupt Allgemeine Java-Themen 10
A Datei, UTF-8, NTRU-Verschlüsselung Allgemeine Java-Themen 3
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
B String Verschlüsselung Allgemeine Java-Themen 6
M Verschlüsselung anwenden Allgemeine Java-Themen 6
J Verschlüsselung Allgemeine Java-Themen 22
T MD5 Verschlüsselung Nullen fehlen? Allgemeine Java-Themen 2
L [Exception] RSA Verschlüsselung. Allgemeine Java-Themen 16
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R 128 Bit Verschlüsselung/Entschlüsselung in Java? Allgemeine Java-Themen 6
F RSA-Verschlüsselung Allgemeine Java-Themen 4
S Verschlüsselung in Java Allgemeine Java-Themen 2
G Interessant! Verschlüsselung in Java, Charset in der JVM? Allgemeine Java-Themen 14
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T Verschlüsselung von Dateien Allgemeine Java-Themen 8
S Verschlüsselung - IllegalBlockSizeException Allgemeine Java-Themen 3
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
D Caesar und Vigenère Verschlüsselung Allgemeine Java-Themen 2
alexpetri Verschlüsselung Allgemeine Java-Themen 13
@ [Sicherheit] Speicherung von Keys für Verschlüsselung Allgemeine Java-Themen 4
P Verschlüsselung in PHP -> Entschlüsselung in Java Allgemeine Java-Themen 2
Lazybone Caeser Verschlüsselung Allgemeine Java-Themen 6
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
S Verschlüsselung Allgemeine Java-Themen 15
J Problem mit Dateien/XOR-Verschlüsselung Allgemeine Java-Themen 5
G RSA-Verschlüsselung Allgemeine Java-Themen 1
P HMACMD5- Verschlüsselung entschlüsseln Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J Probleme bei XOR verschlüsselung ! Allgemeine Java-Themen 5
G Verschlüsselung in Java Allgemeine Java-Themen 9
M RSA Verschlüsselung Allgemeine Java-Themen 7
J Verschlüsselung von Daten Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben