Hey Leute,
ich hab eine Klasse, die mir einen Schlüsselpaar erstellt, und dieses wird erstmal in Name.priv/pub gespeichert. Danach hole ich es da raus, base64-encodiere es, entferne die newlines und speichere es in einer anderen datei. Wenn ich allerdings jetzt die newlines wieder einfuege, und es base64-decodiere, hab ich nicht die gleiche Bytekette, wie vorher.
Weiss einer, was an meinen convert_sig_byte und/oder convert_sig_String Methoden falsch ist?
convert_sig_byte codiert das byte array in einen base64 string und entfernt mittels PatternMatching alle \n.
und convert_sig_String macht das gleiche genau umgekehrt.
Da sowas durchaus interessant ist, hab ich mal noch create_msg und verify_msg dabei gelassen. fuer mein problem sind allerdings nur die convert* methoden relevant.Code:package de.freakbu.tool; import java.io.*; import java.security.*; import java.security.spec.*; import sun.misc.*; public class sigtool { public static void generate(String filename) { try { KeyPairGenerator keyGen = KeyPairGenerator .getInstance("DSA", "SUN"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); keyGen.initialize(1024, random); byte seed[] = random.generateSeed(20); random.setSeed(seed); KeyPair pair = keyGen.generateKeyPair(); PrivateKey priv = pair.getPrivate(); PublicKey pub = pair.getPublic(); byte[] pubKey = pub.getEncoded(); FileOutputStream keyfos = new FileOutputStream(filename + ".pub"); keyfos.write(pubKey); keyfos.close(); byte[] privKey = priv.getEncoded(); FileOutputStream keyfos2 = new FileOutputStream(filename + ".priv"); keyfos2.write(privKey); keyfos2.close(); } catch (Exception e) { System.err.println("Exception: " + e.toString()); System.exit(1); } } public static boolean verify_msg(String txt, String pubkey, byte signature[]) { boolean wahr = false; try { byte[] encKey = convert_sig_byte(pubkey); X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey); KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN"); PublicKey myPubKey = keyFactory.generatePublic(pubKeySpec); Signature sigDecoded = Signature.getInstance("SHA1withDSA", "SUN"); sigDecoded.initVerify(myPubKey); String sigToCompare = txt; sigDecoded.update(sigToCompare.getBytes()); boolean ver = sigDecoded.verify(signature); wahr = ver; } catch (SignatureException g) { System.err.println("Exception: " + g.toString()); System.exit(1); } catch (InvalidKeyException f) { System.err.println("Exception: " + f.toString()); System.exit(1); } catch (NoSuchProviderException e) { System.err.println("Exception: " + e.toString()); System.exit(1); } catch (InvalidKeySpecException d) { System.err.println("Exception: " + d.toString()); System.exit(1); } catch (NoSuchAlgorithmException c) { System.err.println("Exception: " + c.toString()); System.exit(1); } return wahr; } public static byte[] create_msg_sig(String message, String privkey) { byte signature[] = null; try { byte[] encKey = convert_sig_byte(privkey); PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(encKey); KeyFactory keyFactory = KeyFactory.getInstance("DSA"); PrivateKey myPrivKey = keyFactory.generatePrivate(privKeySpec); Signature sig = Signature.getInstance("SHA1withDSA", "SUN"); sig.initSign(myPrivKey); String sigString = message; sig.update(sigString.getBytes()); signature = sig.sign(); } catch (SignatureException g) { System.err.println("Exception: " + g.toString()); System.exit(1); } catch (InvalidKeyException f) { System.err.println("Exception: " + f.toString()); System.exit(1); } catch (NoSuchProviderException e) { System.err.println("Exception: " + e.toString()); System.exit(1); } catch (InvalidKeySpecException d) { System.err.println("Exception: " + d.toString()); System.exit(1); } catch (NoSuchAlgorithmException c) { System.err.println("Exception: " + c.toString()); System.exit(1); } return signature; } public static byte[] convert_sig_byte(String text) { byte foo[] = null; try { String g = insertnewlines(text); foo = new BASE64Decoder().decodeBuffer(text); } catch (IOException a) { System.err.println("error:" + a.toString()); System.exit(1); } return foo; } public static String convert_sig_String(byte text[]) { String foo = null; foo = new BASE64Encoder().encode(text); Pattern p = Pattern.compile("\n"); Matcher m = p.matcher(foo); String mungedString = m.replaceAll(""); return mungedString; } public static String insertnewlines(String text) { String foo = null; int ll = 76; int newcounter = 0, zeichen = 0, mal = 0; zeichen = text.length() - (text.length() % ll); mal = (zeichen / ll); zeichen = text.length() + mal; char neuertext[] = new char[zeichen]; char altertext[] = text.toCharArray(); neuertext[0] = altertext[0]; for(int i = 1; i < text.length(); i++) { if( (i % (ll-1)) == 0 ) { neuertext[newcounter] = '\n'; newcounter++; } neuertext[newcounter] = altertext[i]; newcounter++; } foo = neuertext.toString(); return foo; } }
Ich hoff mal mir kann einer helfen![]()



Zitieren
.oO(wie unkool..)

