giso Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Έγραψα ένα πρόγραμμα διαχείρισης κωδικών. Όποιος έχει την περιέργεια περί τίνος πρόκειται ας το δοκιμάσει. Κατεβάστε το απ’ εδώ: <a href=http://www.filedropper.com/passwordmanager_1> Σίγουρα θα υπάρχουν bugs. Έχω ένα μήνα που το σκαλίζω και όλο και κάτι βρίσκω. Ευπρόσδεκτη οποιαδήποτε υπόδειξη.
kaliakman Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Αν το έχεις open source, ανέβασε κάπου να δούμε τον κώδικα
Luciddream Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Αν το έχεις open source, ανέβασε κάπου να δούμε τον κώδικα Βλέπω ένα javax.mail library, λογικά θα στέλνει τους κωδικούς στο mail του OP Φυσικά πλάκα κάνω, αλλά ναι, δυστυχώς τέτοια projects μόνο open source. Και ακόμα και τότε, πάλι δεν ειναι safe. π.χ Όλοι χρησιμοποιούν open source προγράμματα, αλλά τα τρέχουν απο compiled binaries αλλωνών... p.s βέβαια Java είναι, γίνεται decompile εύκολα. @OP: Ψάξε το να το κάνεις fat jar, και να το τρέχεις με launch4j. Υπάρχουν και installers αν ενδιαφέρεσαι (π.χ Inno Setup) edit2: Καλό είναι να κάνεις και bundle το jre 1
giso Δημοσ. 15 Δεκεμβρίου 2016 Μέλος Δημοσ. 15 Δεκεμβρίου 2016 Αν το έχεις open source, ανέβασε κάπου να δούμε τον κώδικα Υπάρχουν 58 classes & 43 fxml αρχεία και από git δεν κατέχω. Ξέχασα να αναφέρω ότι απαιτεί java 8. Για κωδικό εισόδου αρκεί ένα Enter.
Aztec Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Αν δεν μιλάμε για commercial εφαρμογη και επειδη μιλάμε για password manager που το σημαντικό κομμάτι είναι ή ασφάλεια θέλεις να μοιραστεις μαζί μας το security model που ακολουθησες για το encrypt decrypt ?
giso Δημοσ. 15 Δεκεμβρίου 2016 Μέλος Δημοσ. 15 Δεκεμβρίου 2016 Αν δεν μιλάμε για commercial εφαρμογη και επειδη μιλάμε για password manager που το σημαντικό κομμάτι είναι ή ασφάλεια θέλεις να μοιραστεις μαζί μας το security model που ακολουθησες για το encrypt decrypt ? package cryptography; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Cypher { public static void encrypt(String key_text, FileInputStream fin, FileOutputStream fout) throws IOException { int c; byte values[]; int key = KeyGenerator.generateKey(key_text); Encryption en = new Encryption(key); try{ while ((c = fin.read()) != -1) { values = en.encrypt(c); for (byte b : values) fout.write(; } } finally { if (fin != null) { fin.close(); } if (fout != null) { fout.close(); } } } public static void decrypt(String key_text, FileInputStream fin, FileOutputStream fout) throws IOException { boolean eof = false; int c; char values[] = new char[4]; int key = KeyGenerator.generateKey(key_text); Decryption de = new Decryption(key); try { while (true) { for (int i = 0; i < 4; i++) { c = fin.read(); if (c == -1) { eof = true; break; } values[i] = (char) c; } c = de.decrypt(values); fout.write(c); if (eof) { break; } } } finally { if (fin != null) { fin.close(); } if (fout != null) { fout.close(); } } } } package cryptography; public class Decryption { private final int key; public Decryption(int key) { this.key = key; } private short lefCircular_shift_four_times(short value) { short temp = (short) (((value & 0xF000) >>> 12 ) & 0x000F); short result = (short) ((((short)value << 4) | temp) & 0XFFFF); return result; } private short rightCircular_shift_three_times(short value) { short temp = (short) (value & 0x0007); short result = (short) (((value >>> 3) & 0x1FFF) | (temp << 13)); return result; } private int arrayToInt(char[] arr){ int result; result = (int) arr[0]; result = (result << 8) | (int) arr[1]; result = (result << 8) | (int) arr[2]; result = (result << 8) | (int) arr[3]; return result; } public char decrypt(char[] arr){ int result; int mapped_value; int value = arrayToInt(arr); short first_half = (short)((value & 0xFFFF0000) >>> 16); short second_half = (short)(value & 0xFFFF); first_half = rightCircular_shift_three_times((short)first_half); second_half = lefCircular_shift_four_times((short)second_half); result = ((first_half << 16) & 0xFFFF0000) | (second_half & 0xFFFF); result = Integer.rotateRight((int)result, 3) & 0xFFFFFFFF; mapped_value = Integer.reverse(result) & 0XFFFFFFFF; return (char)(mapped_value - this.key); } } package cryptography; public class Encryption { private int key = 0; public Encryption(int key){ this.key = key; } public short lefCircular_shift_three_times(short value) { short temp = (short) (((value & 0xE000) >>> 13) & 0x0007); short result = (short) ((((short)value << 3) | temp) & 0XFFFF); return result; } private short rightCircular_shift_four_times(short value) { short temp = (short) (value & 0x000F); short result = (short) (((value >>> 4) & 0x0FFF) | (temp << 12)); return result; } private byte[] intToArray(int val){ byte result[] = new byte[4]; result[0] = (byte)((val & 0xFF000000) >> 24); result[1] = (byte)((val & 0xFF0000) >> 16); result[2] = (byte)((val & 0xFF00) >> 8); result[3] = (byte)(val & 0xFF); return result; } byte[] encrypt(int value) { int mapped_value = value + key; int result = Integer.reverse(mapped_value) & 0XFFFFFFFF; result = Integer.rotateLeft((int)result, 3) & 0xFFFFFFFF; short first_half = (short) (((result & 0xFFFF0000) >>> 16) & 0xFFFF); short second_half = (short) (result & 0xFFFF); first_half = lefCircular_shift_three_times((short)first_half); second_half = rightCircular_shift_four_times((short)second_half); result = ((first_half << 16) & 0xFFFF0000) | (second_half & 0xFFFF); return intToArray(result); } } package cryptography; import java.math.BigDecimal; public class KeyGenerator { public static int generateKey(String key_str) { byte alpha, red, green, blue; try { BigDecimal key = new BigDecimal(generateKey_int(key_str)); alpha = key.remainder(new BigDecimal("251")).byteValue(); alpha += 4; red = key.remainder(new BigDecimal("241")).byteValue(); red += 14; green = key.remainder(new BigDecimal("239")).byteValue(); green += 16; blue = key.remainder(new BigDecimal("233")).byteValue(); blue += 22; return alpha << 24 | red << 16 | green << 8 | blue; } catch (NumberFormatException e) { return 0; } } private static String generateKey_int(String key_str) { StringBuilder strbilder = new StringBuilder(); for (int i = 0; i < key_str.length(); i++) if(key_str.codePointAt(i) > 47 && key_str.codePointAt(i) < 58) strbilder.append(key_str.charAt(i)); else strbilder.append(key_str.codePointAt(i)); return strbilder.toString(); } }
Luciddream Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Sorry για το off topic, αλλά τα Streams καλό να κλείνουν απο εκεί που ανοίγουν..
DevFromHell Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 ωραίο προτζεκτάκι είναι σάν ιδέα αλλά θέλει advanced κωδικα Java (PBKDF2, salt, key stretching κτλ) 1
Aztec Δημοσ. 15 Δεκεμβρίου 2016 Δημοσ. 15 Δεκεμβρίου 2016 Εγω απλά θα σε παραπεμψω να ριξεις μια ματιά εδω.Λείπουν key derivation functions όπως PBKDF2 αλλα είιναι καλή πήγη για τα aspects του security model που πρέπει να εφαρμόσεις
giso Δημοσ. 16 Δεκεμβρίου 2016 Μέλος Δημοσ. 16 Δεκεμβρίου 2016 Μετά από λίγο ψάξιμο και διάβασμα θα χαρακτήριζα την προσέγγισή μου στο θέμα της κρυπτογράφησης ως αφελή. 3
tsofras Δημοσ. 16 Δεκεμβρίου 2016 Δημοσ. 16 Δεκεμβρίου 2016 Μετά από λίγο ψάξιμο και διάβασμα θα χαρακτήριζα την προσέγγισή μου στο θέμα της κρυπτογράφησης ως αφελή. Μπράβο για την προσπάθεια και μπράβο για το σχόλιο που κάνεις στον εαυτό σου (λίγοι έχουν μείνει να το κάνουν αυτό). Εγώ πάντως που έκανα την πτυχιακή μου στην κρυπτογράφηση , μετά απο 1 χρόνο διαβάσματος , την τελείωσα κούτσα κούτσα με ένα απλό rsa public encryption. Μόνο τα μαθηματικά που έπρεπε να μπλέξω για να εμβαθύνω περισσότερο μου έκοψαν τα φτερά
defacer Δημοσ. 16 Δεκεμβρίου 2016 Δημοσ. 16 Δεκεμβρίου 2016 Μετά από λίγο ψάξιμο και διάβασμα θα χαρακτήριζα την προσέγγισή μου στο θέμα της κρυπτογράφησης ως αφελή. Μπράβο και από μένα για την αντικειμενικότητα. Μόνο έτσι μπορείς να πας μπροστά. Να πω την αλήθεια διάβασα το αρχικό post, έβγαλα το προφανές συμπέρασμα ("αποκλείεται να ξέρει τι κάνει οπότε το μόνο θέμα συζήτησης είναι αν ο κώδικας είναι απλά wrong ή not even wrong") και δε σχολίασα καθόλου. Το σχόλιο θα ήταν πάνω κάτω, δεν καταλαβαίνω γιατί κάθεται κανείς να φτιάξει τέτοιο πρόγραμμα εφόσον α) αν δεν ξέρεις τι κάνεις το αποτέλεσμα θα είναι άχρηστο και β) αν ξέρεις ακριβώς τι κάνεις, δεν έχει νόημα να το κάνεις γιατί δε θα μάθεις τίποτα το ίδιο ακριβώς πράγμα το έκαναν άλλοι πριν από σένα. Αυτά συνήθως δεν τα παίρνουν καλά όσοι δεν έχουν την κατάλληλη νοοτροπία. Μετά στη συνέχεια είδα ότι έβαλες κώδικα, home made encryption κλπ κλπ => as predicted, δεν ξέρει τι κάνει. Αλλά αυτό το τελευταίο συμπέρασμά σου είναι όλα τα λεφτά που πρέπει να πάρεις από την περιπέτεια: την επόμενη φορά μη ξεκινήσεις να κάνεις κάτι χρηστικό αν δεν είσαι σίγουρος ότι κατέχεις τουλάχιστον τα βασικά του χώρου. 3
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα