junghansmega Geschrieben 4. September 2008 Geschrieben 4. September 2008 Hallo zusammen. Ich versuche einen String asymetrisch zu entschlüsseln, und zwar mit einem private Key, der entweder in einer Datei vorliegt, oder (besser) hardcoded im Programm ist. Mein Problem: Ich bekomme den Key nicht aus dem Privatekey Objekt heraus, so dass ich ihn in einer datei / einem Array of byte oder sonstwie speichern könnte geschweige denn wieder hinein. import java.security.KeyPairGenerator; import java.security.KeyPair; import java.security.PublicKey; import java.security.PrivateKey; import javax.crypto.Cipher; public class test { public static void main(String[] unused) throws Exception { //String xform = "RSA/NONE/PKCS1PADDING"; String xform = "RSA"; // schlüsselpaar basteln KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(512); // das ist die keysize. KeyPair kp = kpg.generateKeyPair(); PublicKey pubk = kp.getPublic(); PrivateKey prvk = kp.getPrivate(); // und nun? } } Ich kann mir den Privatekey ausgeben lassen, aber er sieht doch recht unhandlich aus. Ausserdem kann Ich die Ausgabe nicht wieder in ein Privatelkey Objekt umwandeln: //so-etwas bräuchte ich: prvk = "Sun RSA private CRT key, 512 bits modulus: 7757990087399372245545218842535435689837578717932563733546606436611179938565607027947506374368865584085133938486865991025283311860284487785959287136070239 public exponent: 65537 private exponent: 1944676459950819952848266706519555938060206344174987518725355914073705907056363002781418582255448754169761736661472542780535171274760994730944436037929473 prime p: 103157019361650556774972644749961036490077599183650824108828733584040085479489 prime q: 75205644127824294477694346174400168727140830048192821297931289902304232366751 prime exponent p: 77409082734739349247545351422224603102759147508319939558540798158742502155969 prime exponent q: 25066635493357857219139650851177156196891287235801516523978990442436084224473 crt coefficient: 14269828720942853141909471878463833736413263885136741921525376896953678303226" (was ich da versuche in den PrivateKey zu laden, ist, was mit entgegenkommt, wenn ich den privatekey einfach per system.out.println ausgebe. Wie kann ich also ein Privatekey Objekt wieder befüllen? Dank im Voraus Zitieren
tha_specializt Geschrieben 5. September 2008 Geschrieben 5. September 2008 (bearbeitet) oder (besser) hardcoded im Programm ist. Das ist NIE besser, das ist sogar sehr dumm und unsicher, weil Java-Bytecode sehr leicht zu entschlüsseln ist Mein Problem: Ich bekomme den Key nicht aus dem Privatekey Objekt heraus, so dass ich ihn in einer datei / einem Array of byte oder sonstwie speichern könnte geschweige denn wieder hinein. Ähm ... RTFM?? java.security.PrivateKey.getEncoded() Ich kann mir den Privatekey ausgeben lassen, aber er sieht doch recht unhandlich aus. aha ... und wen interessiert es, ob der "unhandlich" (wie glaubst du sollte er denn aussehen? Ein Bild von deiner wunderhübschen Freundin oder wie??) aussieht? Dich nicht, uns nicht und Java erstrecht nicht. Wie kann ich also ein Privatekey Objekt wieder befüllen das war hoffentlich eine Scherzfrage ... Bearbeitet 5. September 2008 von tha_specializt Zitieren
junghansmega Geschrieben 9. September 2008 Autor Geschrieben 9. September 2008 Ääähmmja.... Selbst wenn ich mehr Zeit und weniger Niveau hätte - eine Antwort erübrigt sich wohl, da der Kollege überraschenderweise gesperrt ist:p Für die von Euch, die trotzdem wissen wollen, wie's geht: Einem PublicKey Objekt kann man den Schlüssel in handhabbarer Form (als Array of Byte) folgendermaßen entlocken: byte[] myPublicKeyByteArray = myPublicKey.getEncoded(); Dann kann man mit diesem Array of Byte ein neues PublicKey Objekt "NewPublicKey" folgendermaßen befüllen: KeyFactory myKeyFactory = KeyFactory.getInstance("RSA"); EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(myPublicKeyByteArray); PublicKey NewPublicKey = myKeyFactory.generatePublic(publicKeySpec); Gruß Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.