bloggers bloggers

Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Marco Napolitano
Messaggi: 78
Stelle: 0
Data: 12/06/20
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Criptare i dati in Java con chiave asimmetrica

Può capitare di dover realizzare dei moduli di registrazione o di sicurezza per i quali è necessario implementare meccanismi di cifratura a chiave asimmetrica.

In questo breve post si mostreranno dei metodi di utilità per la generazione di chiavi asimettriche con l’algoritmo RSA:
Per generare una coppia di chiavi(pubblica e privata) basta eseguire il seguente codice:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
KeyPairGenerator keyGen;
keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
KeyPair pair = keyGen.generateKeyPair();
PublicKey dVelPrivateKey = pair.getPrivate();
PrivateKey dVelPublicKey = pair.getPublic();
Il metodo getInstance della classe SecureRandom accetta come argomenti il nome di un algoritmo ed il provider.
Il seguente metodo invece serve per la cifratura/decifratura dei dati:
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
privatestaticbyte[] doCipher(Key cipherKey,byte[] input,boolean encrypt)throws DVelLicenseException{
try{
Cipher cipher = Cipher.getInstance(XFORM);
if(encrypt)
cipher.init(Cipher.ENCRYPT_MODE,cipherKey);
else
cipher.init(Cipher.DECRYPT_MODE, cipherKey);
return cipher.doFinal(input);
}catch (NoSuchAlgorithmException e) {
thrownew DVelLicenseException(e.getMessage());
}catch(NoSuchPaddingException e){
thrownew DVelLicenseException(e.getMessage());
}catch(InvalidKeyException e){
thrownew DVelLicenseException(e.getMessage());
}catch (IllegalBlockSizeException e) {
thrownew DVelLicenseException(e.getMessage());
}catch (BadPaddingException e) {
thrownew DVelLicenseException(e.getMessage());
}
}
Un altro metodo utile è quello per creare una chiave a partire da un array di bytes,questo potrebbe tornare utile per il salvataggio delle chiavi su file :
importjava.security.NoSuchAlgorithmException;
importjava.security.spec.InvalidKeySpecException;
importjava.security.spec.X509EncodedKeySpec;
publicstatic Key createKeyFromByte(boolean publicKey,byte[] keyEncoded){
try{
KeyFactory keyFactory = KeyFactory.getInstance(XFORM);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyEncoded);
if(publicKey)
return keyFactory.generatePublic(keySpec);
else
return keyFactory.generatePrivate(keySpec);
}catch(NoSuchAlgorithmException e){
returnnull;
} catch (InvalidKeySpecException e) {
returnnull;
}
}
Precedente
Commenti
Nessun commento. Vuoi essere il primo.