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)
 
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.
 
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:

Zurück
Oben