Crypt_RSA

theflash

Mitglied
Hallo,

ich versuche mich seit geraumer Zeit am Crypt-RSA-Paket. Allerdings nicht PHP-intern, sondern in Kombination mit Java.
PHP intern kann ich ver- und entschlüsseln.
Java-intern kann ich auch ver- und entschlüsseln.
PHP und Java zusammenzubringen funktioniert bei mir allerdings nicht.


Ich würde gerne die Keys mit Java erzeugen, in PHP einlesen, dann die Schlüssel erstellen, verschlüsseln, und in Java wieder entschlüsseln.

Das eigentliche Problem ist, dass PHP völlig anderen verschlüsselten Output erzeugt als Java. Ist es evtl. irgendwie codiert oder gepadded?

Ich habe bereits beide Crypt-Methoden von Crypt-RSA ausprobiert. encryt() und encryptBinary().
Zu dem Thema scheint es leider nicht viel zu geben :-(
- Hoffe mal, dass mir jemand helfen kann...
 
Also ich denke am Besten ist es, wenn ich einfach mal ein wenig Quellcode poste...

Fangen wir mit php an:

PHP:
    require_once("Crypt/RSA.php");

    $pkExp = implode('',file("java/RSATest/bin/pkExp.txt")); //public Key einlesen
    $skExp = implode('',file("java/RSATest/bin/skExp.txt")); //private Key einlesen
    $modulus = implode('', file("java/RSATest/bin/modulus.txt")); //modulus einlesen

    //Public-Key-Object erzeugen
    $publicKey = new Crypt_RSA_Key($modulus, $pkExp, "public", "default", "fehler");

    //Daten verschluesseln
    $cryptRSA = new Crypt_RSA();
    $encryptedData = $cryptRSA->encryptBinary("daten", $publicKey);

    //Ergebnis in Datei schreiben
    $fp = fopen("java/RSATest/bin/encdata.txt", "w");
    fputs($fp, $encryptedData);
    fclose($fp);
    
    //Fehlerfunktion
    function fehler($obj) {
       die(var_dump($obj));
    }

Nun zum Java-Code

Code:
//Verschluesselungfunktion
private void decryptData(String filename) {
try {
	BigInteger modulus = new BigInteger(this.readFromFile("modulus.txt"));
	BigInteger skExp = new BigInteger(this.readFromFile("skExp.txt"));
			
	RSAPrivateKeySpec pks = new RSAPrivateKeySpec(modulus, skExp);
			
	KeyFactory kf = KeyFactory.getInstance("RSA");
	PrivateKey pk = kf.generatePrivate(pks);
			
	Cipher cipher = Cipher.getInstance("RSA");
	//Entschluesseln
	cipher.init(Cipher.DECRYPT_MODE, pk);
						
  	CipherInputStream cis = new CipherInputStream(new FileInputStream(filename), cipher);
	ByteArrayOutputStream baosDecryptedData = new ByteArrayOutputStream();
			
	byte[] buffer = new byte[8192];
	int len = 0;
			
	while((len = cis.read(buffer))> 0) {
		baosDecryptedData.write(buffer,0,len);
	}
			
	baosDecryptedData.flush();
	cis.close();

	System.out.println("Decrypted data: " + new String(baosDecryptedData.toByteArray(),"UTF-8"));
					
			
	} catch(Exception e) {
		System.out.println(e);
	}
}

Nachfolgend die Keyerzeugung...

Code:
public void generateKeys() {
	try {
		//Cipher cipher = Cipher.getInstance("RSA");
		KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
		kpg.initialize(1024);
		KeyPair keyPair = kpg.generateKeyPair();
			
		this.writeToFile("pkExp.txt", (((RSAPublicKey)keyPair.getPublic()).getPublicExponent()).toString());
		this.writeToFile("skExp.txt", (((RSAPrivateKey)keyPair.getPrivate()).getPrivateExponent()).toString());
		this.writeToFile("modulus.txt", (((RSAKey)keyPair.getPrivate()).getModulus()).toString());
	} catch(Exception e) {
		System.out.println(e);
	}
}


Zusaetzlich gibt es noch die zwei Hilfsfunktionen zum Ein- und Auslesen von Dateien:

Code:
        private void writeToFile(String filename, String content) throws Exception {
		FileWriter fw = new FileWriter(filename);
		fw.write(content);
		fw.flush();
		fw.close();
	}
	
	public String readFromFile(String filename) throws Exception {

	File inputFile = new File(filename);
	FileReader fr = new FileReader(inputFile);
        
        int size = (int)inputFile.length();
        char data[] = new char[size];
        
        fr.read(data, 0, size);
        fr.close();

        return new String(data);
	}
 
Um ehrlich zu sein weiß ich jetzt gerade nicht wie ich dir weiterhelfen kann. Ich würde einfach mal Zwischenwerte ausgeben (generierte Schlüssel etc.) und diese Werte vergleichen.
 
Zurück