Sto tentando di implementare PKI. Voglio cifrare una grande stringa usando RSA in java senza usare il castello gonfiabile. Il problema che sto ottenendo è che i dati non devono essere più lunghi di 117 byte. Ho provato a cercare la soluzione in cui ho fallito. Sono novizio in questa crittografia. Per favore aiutatemi dando una grande stringa come esempio e spiegatela.Cifra e decrittografa la stringa di grandi dimensioni in java utilizzando RSA
risposta
Non è possibile utilizzare una decifratura della crittografia RSA su più di circa 128 byte alla volta. È necessario dividere i dati e farlo in un ciclo praticamente scrivendo i byte su String/Array man mano che si procede. Se il tuo unico problema è la dimensione dei dati, probabilmente non hai molto altro da fare. Basta dividere i dati.
Un grande esempio, forse più completo per voi, che fare con le stringhe di dimensioni superiori a 128 byte: http://coding.westreicher.org/?p=23
Se avete bisogno di ulteriori spiegazioni sulla cifratura RSA in generale:
Il seguente codice mostra come utilizzare KeyPairGenerator per generare una coppia di chiavi RSA in Java:
// Get an instance of the RSA key generator
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// Generate the keys — might take sometime on slow computers
KeyPair myPair = kpg.generateKeyPair();
questo vi darà un oggetto coppia di chiavi, che detiene due chiavi: una privata e una publ circuito integrato. Per poter utilizzare queste chiavi, è necessario creare un oggetto Cipher, che verrà utilizzato in combinazione con SealedObject per crittografare i dati che si intende terminare sulla rete. Ecco come lo fai:
// Get an instance of the Cipher for RSA encryption/decryption
Cipher c = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Encrypt, giving it the public key
c.init(Cipher.ENCRYPT_MODE, myPair.getPublic());
Dopo aver inizializzato il Cipher, siamo pronti per crittografare i dati. Poiché dopo la crittografia i dati risultanti non avranno molto senso se li vedi "nudi", dobbiamo incapsularli in un altro oggetto. Java fornisce questo, dalla classe SealedObject. SealedObjects sono contenitori per oggetti crittografati, che crittografano e decodificano il loro contenuto con l'aiuto di un oggetto Cipher.
Il seguente esempio illustra come creare e crittografare il contenuto di un SealedObject:
// Create a secret message
String myMessage = new String("Secret Message");
// Encrypt that message using a new SealedObject and the Cipher we created before
SealedObject myEncryptedMessage= new SealedObject(myMessage, c);
L'oggetto risultante possono essere inviati attraverso la rete senza timore, poiché è crittografato. L'unico che può decifrare e ottenere i dati, è quello che detiene la chiave privata. Normalmente, questo dovrebbe essere il server. Per decifrare il messaggio, è necessario reinizializzare l'oggetto Cipher, ma questa volta con una modalità diversa, decrittografare e utilizzare la chiave privata anziché la chiave pubblica.
Questo è il modo di fare questo in Java:
// Get an instance of the Cipher for RSA encryption/decryption
Cipher dec = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Decrypt, giving it the private key
dec.init(Cipher.DECRYPT_MODE, myPair.getPrivate());
Ora che il Cipher è pronto a decifrare, dobbiamo dire al SealedObject per decifrare i dati conservati.
// Tell the SealedObject we created before to decrypt the data and return it
String message = (String) myEncryptedMessage.getObject(dec);
System.out.println("foo = "+message);
Attenzione quando si utilizza il metodo GetObject, dal momento che restituisce un'istanza di un oggetto (anche se in realtà è un esempio di stringa), e non un'istanza della classe che era prima della crittografia, in modo da' Dovremo lanciarlo nella sua forma precedente.
Quanto sopra è da: http://andreas.louca.org/2008/03/20/java-rsa-encryption-an-example/
RSA non è inteso per la cifratura dei dati bulk. Invece, usa un codice simmetrico, come AES, per crittografare la tua "stringa grande". Quindi, crittografare la chiave simmetrica utilizzata per AES con la chiave RSA.
BouncyCastle supporta due protocolli per questo scopo: S/MIME e PGP. Tutti i protocolli sensibili sulla privacy utilizzano algoritmi asimmetrici per il trasporto di chiavi o lo scambio di chiavi in questo modo.
La dimensione del messaggio che può essere crittografata con RSA dipende dal modulo della chiave, meno alcuni byte necessari per il riempimento sicuro del messaggio.
La crittografia ibrida come questa è la strada da percorrere. – CodesInChaos
Un esempio di codice o un collegamento all'API pertinente non farebbe male. – CodesInChaos
- 1. Cifra e decrittografa la stringa con la chiave PHP
- 2. Cifra e decrittografa la stringa con C++, Openssl e aes
- 3. Leggere file di grandi dimensioni in Java
- 4. Carica file binario di grandi dimensioni utilizzando Java Spring RestTemplate
- 5. Gestione di costanti stringa grandi in Java
- 6. La crittografia RSA Java e la decodifica Node.js non funzionano
- 7. RSA Crittografia dei grandi dati in C#
- 8. Come gestire griglie stringa di grandi dimensioni?
- 9. Caricamento di immagini di grandi dimensioni utilizzando Base64 e JSON
- 10. Gestione di elenchi di stringhe di grandi dimensioni in java
- 11. Applicazione Java Enterprise di grandi dimensioni - Modularizzazione
- 12. Utilizzo di una chiave pubblica RSA per decrittografare una stringa crittografata utilizzando la chiave privata RSA
- 13. splitting una stringa di grandi dimensioni in oggetti SET
- 14. Impossibile scaricare i dati di grandi dimensioni utilizzando javascript
- 15. Forzare deallocazione di oggetto cache di grandi dimensioni in Java
- 16. Attuazione SHA1 JavaScript per stringa di grandi dimensioni
- 17. Generazione di numeri casuali di grandi dimensioni
- 18. PHP readfile() e download di grandi dimensioni
- 19. Java: regex replacement in file di grandi dimensioni
- 20. Gestire una matrice di grandi dimensioni in Java
- 21. Immagini di sfondo di grandi dimensioni e dimensioni dello schermo
- 22. Scarica file di grandi dimensioni utilizzando i grails
- 23. Come si modifica una stringa json di grandi dimensioni?
- 24. Java - Trasferimento di file di grandi dimensioni su canali - NIO
- 25. Chiave da String in Java RSA
- 26. File di grandi dimensioni e hashing - preoccupazione
- 27. Nessuna cifra Java Regex Pattern
- 28. errore di riempimento quando si utilizza RSA di crittografia in C# e la decrittografia in Java
- 29. Come posso sostituire la prima riga di un file di grandi dimensioni in Java?
- 30. Libreria Java per la memorizzazione e l'elaborazione di grafici di grandi dimensioni (fino a 600k vertici)
La sicurezza, e in particolare la crittografia, è ** difficile **. Dovresti utilizzare i pacchetti di alto livello esistenti anziché le API crittografiche crude o imparare i dettagli di come funzionano. In caso contrario, è probabile che si scriva codice non sicuro. – SLaks
pacchetti di alto livello significa? –
per favore pubblica il tuo codice. possiamo lavorare da lì. – Frank