0 Phänomen bei JCE->rsa

NightWalk3r

Mitglied
Hallo, bin gerade auf, aus meiner sicht verwirreendes gestossen. ich verschlüssele einen string, wie hier zu sehen:

from text: 1234
länge enc: 4
encrypted: 27c7c9e3505114a07cab4458d9b8ceb16f21daa7ec4c044c3fd8906be810fb183d4f8b3b25782d67f43f2e73983576103661c031fac18fbd64216d9589861614bbd0d8c89db4fb8a5a5667f34a990fd121d9e37e10126031f498c0ae2f6a4f0eb96b8ada4ac09437653bf08826bb9cca1bb8c202e1205fcae144e8e551d8b7f365e77d6f1bb198b7bdb8cac01b18854b2428894b59812f37b36c83af1938c9a32f1f5e8d4a25bd2c3a8f3324244085e755d3f087b1dd0d4e3a040bf8d611cbf68b1521e877156f192862f74de3edf13139725784b49f24721c7aef05919212753c7aae75877bd0ebe3edaa12380e4c2be240c17901658cedb3f4bf96d445f168
länge dec: 256
decrypted: 1234

nur wenn ich stattdessen "0000" bringt der nur noch müll, sowie bei "00" und "4588810"...allerdings schafft er es mit einem anderen schlüsselpaar, auch diese zu ver und entschlüsslen...auch setzt er dann die länge des verschlüsselten textes auf 257 bytes
zum testen habe ich, di folgenden schlüsselparameter:

Modulus: "00bed5a79a058f8873bd80262d635d0fc5cac851785df1b6d7459efabc78e60f51c47c6a6aab2348e8ec25ee575b70bc6dd4de3243c63189e92b830eb9abb9e1075d5518777ff42cc07e6abb2c8a6150c91669b7a8792200bf867bd0f0846bcd336f01671725fa25883b4838d87fcee29c6274a14041dbc892ec9e5f5b0ca53d6160bef8c24e0471c39694784ca1e3edccc09a9f9cf1b8911a541e3904839f3bedb1144363836d33e4a7e555dc32d9bffdf2849769baf04e1cfa5654f8e456abae052701428831f3f7e682e17d770bb82d900ee4f3552cf116cffefe9570cd8d4cf5dd12a78c121ad9ac80011a4e098533868d88fc6bff1c21b7e8e6bfd1904295"

priv Exponent: "009320a822104d73f73fcfb01f682f147cfaf56c126fe36e8313f318fefbfaeb2eb05cf7b29b950d9e3e8a93f217d697ffd9912191ad18fe699d99625df5aece765e17c050497f188da429677b5488e8bed01fdb6ff14c2ce57caab310ec172cd28dafb82a59a63d0f861d0d6ea542fce572e6d677730f1ed95fc24e642520b46bad588d155bb0494eb91ddb57d821b30859ac009b1b9e9d735c9438ed882be7de431a7de1bcec2d631ea3ffbbfcc37d080efe85f3fe9c0d9a9b09cb51d2cc206dc9e5f2b2f63d68b1fe41a0ee481437555f44ce77a8426c816d51f581b27b2954759a49f4158a41dd1dd7561748964cd79fb906688f1a1c456d0fc5a7bf1bb055"

pub exponent: "010001"

da es mit einem anderen Schlüssel funktioniert, denke ich das ich vom posten des algos absehen kann, aber vieleicht weiss ja einer von euch woran das liegen kann, damit ich solch einem fehler vorbeugen kann

MfG NightWalk3r
 
Also ich weiss ja nicht, was das da oben alles sein soll (völlig verworrener und zusammenhangsloser Text), aber meine Erfahrungen mit JCE sind:

1) Keine vorgefertigten Methoden benutzen bzw. so tief wie möglich eingreifen (sprich: Strings rein und Byte[] raus und umgekehrt

2) die ver und -entschlüsselung voneinander trennen, jeweils eine unabhängige Methode

3) alle globalen Variablen, die von diesen neuen Methoden benutzt werden immer beim ersten auslesen löschen / überschreiben

4) Seeds, Keys, IV´s und dergleichen möglichst nicht in den RAM verlagern bzw. nach Erfüllung der Aufgabe wieder löschen / unbrauchbar machen

5) Auf absolute Integrität achten, das casten zu Strings sollte eigentlich tabu sein

Falls es dich interessiert kann ich dir per PM einen funktionierenden Beispiel-Code geben, der mittels 256bit AES ver und -entschlüsselt, Fehler extrem unwahrscheinlich
 
dachte ich mir schon das des ein wenig wirr klingen könnte. zusammengefasst habe ich im oberen ein beispiel, mit den unteren rsa schlüsselparametern angegeben...
da ich den schlüssel in einer xml datei speichern will, war dies die beste möglichkeit die schlüssel in ihre parameter aufgesplittet zu speichern.
Die parameter hbe ich deswegen angegeben, damit andere vieleicht den schlüssel, mit "0000" als ciphertext mal in ihrerer implementation testen könnten...

@the_specializt deine angegebenen punkte habe ich befolgt. das Problem besteht, aus meiner sicht eher in einer gewissen schlüssel - ciphertext kombination
 
unmöglich, jeder Algo kann jeden Text ver und -entschlüsseln, wenn Key + Seed bekannt sind,
(ja sogar die Einweg-Algos, aber hier würde es eben tausende von Jahren dauern ;-))
es interessiert ihn nicht ob das 0000 oder "blablablubb" ist, die Bytes werden einfach hin und -hergeshifted und weiter verarbeitet (hier: Primzahlen & sein Kind)

Wenn du bestimmte Texte nicht verwenden kannst, so deutet das entweder auf falsche Handhabung der Interfaces, fehlerhaftes bzw. unangebrachtes casten oder anwendung von nicht zugelassenen Modis (zb. CBC wo es ECB o.ä. sein sollte) hin

versuch mal das hier:
Java:
synchronized byte[][] verschluesseln(String klartext) throws Exception{
         
        byte[] raw;                    
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(256); 
            SecretKey skey = kgen.generateKey();
            raw = skey.getEncoded();       
        
        SecretKeySpec key = new SecretKeySpec(raw, "AES");
        
        Cipher chiffre = Cipher.getInstance("AES");
        chiffre.init(Cipher.ENCRYPT_MODE, key);
        
        byte[] text2 = klartext.getBytes();
        byte[] verschluesselt = chiffre.doFinal(text2);
        byte[][] rueckgabe = { verschluesselt, raw };
        return(rueckgabe);
     }
Java:
synchronized String entschluesseln(byte[] chiffre, byte[] seed) throws Exception{
                
         SecretKeySpec key = new SecretKeySpec(seed, "AES");
         Cipher chiffre2 = Cipher.getInstance("AES");
         chiffre2.init(Cipher.DECRYPT_MODE, key);
         

         byte[] entschluesselt = chiffre2.doFinal(chiffre);
         
         String ende = new String(entschluesselt);
  
         return(ende);
     }

Das funktioniert garantiert und setzt die Modis AFAIK automatisch (irgendeine Standard-Einstellung, kA, is aber auch unwichtig)

Anhand dieses Beispiels kannste deine Methode aufbauen, wenn es dann immernoch nicht funktioniert bitte melden
 
Zuletzt bearbeitet:
Zurück