Je travaille sur un protocole sécurisé client-serveur où j'ai besoin d'utiliser RSA en Java pour crypter une clé secrète pour les condensats HMAC car la clé doit être envoyée au serveur. Le cryptage a deux étapes; Premièrement, j'ai besoin de crypter la clé symétrique avec une clé asymétrique publique, puis, ce message crypté est crypté avec une clé asymétrique privée.Cryptage d'une clé secrète avec RSA en Java
A cet effet, je produis le SecretKey comme:
public SecretKey generate(){
KeyGenerator generator = KeyGenerator.getInstance("HMACSHA256");
k = generator.generateKey();
return k;
}
Plus tard, j'utiliser ce code pour chiffrer tout tableau d'octets avec une clé publique:
public byte[] encryptPublic(PublicKey key, byte[] array){
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(array);
return encrypted;
}
Le code pour le chiffrement avec un privé La clé est la même mais en utilisant une clé privée.
Pour le cryptage RSA J'utilise 1024 bits longues clés asymétriques et j'ai donc deux questions principales:
- Comment puis-je transformer mon SecretKey à un tableau d'octets afin de le chiffrer avec RSA et public clé?
- Étant donné que le chiffrement par clé publique produit un tableau d'octets de 128 octets, comment puis-je chiffrer à nouveau ce message avec une clé privée si la clé est longue de 1024 bits et ne peut chiffrer qu'un message long de 117 octets?
Quelques commentaires. 1) Ne pas utiliser les valeurs par défaut dans la cryptographie, n'importe où. Dans votre méthode 'getInstance()', spécifiez toujours la chaîne de transformation complète en trois parties. 2). Ne cryptez pas avec la clé privée, exécutez plutôt * signing *. Vous utilisez la classe 'Signature' pour cela. 3) Les clés, y compris SecretKeys, ont la méthode 'getEncoded()' pour retourner un tableau d'octets représentant la clé dans un format standard. Pour les clés symétriques, c'est-à-dire les instances 'SecretKey', le tableau d'octets renvoyé par' getEncoded() 'est simplement la clé brute octets. –
Pour Q2: Vous pouvez crypter le texte chiffré avec une clé AES aléatoire, puis crypter cette nouvelle clé AES avec un autre tour de RSA, mais pourquoi voudriez-vous le faire? –