2009-06-16 5 views
-1

J'utilise JAVA Mon ami utilise SYMBIANComment décrypter des données en utilisant une rsa privatekey

Moi et mon ami ont le même module rsa. Si je crypte les données en utilisant la clé publique, mon ami est capable de déchiffrer la même chose. Mais si mon ami crypte les données avec la clé publique, je ne suis pas capable de déchiffrer les données. Je suis une erreur « Les données doivent commencer par zéro »

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 
    return encryptionByte; 
} 

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.DECRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 

    System.out.println("Recovered String  ::: " + new String(encryptionByte)); 
} 

Merci Sunil

+0

Pouvez-vous poster une partie du code Java que vous utilisez ou quelles bibliothèques? – Thilo

+0

J'utilise RSA sans rembourrage sans mode de chiffrement. – Sunil

+0

J'ai posté s'il vous plaît jeter un oeil à ce sujet. – Sunil

Répondre

6

La fonction decrypt utilise publicKey - où est-il? Notez que les données chiffrées avec une clé publique doivent être décryptées avec la clé privée correspondante et non avec la même clé publique. Le cryptage asymétrique tel que RSA a la notion de paires de clés où chaque clé de la paire peut décrypter les données cryptées avec l'autre clé, contrairement au cryptage symétrique tel que AES où la même clé fonctionne à la fois pour le cryptage et le décryptage.

+0

Oui, Symbian a créé une clé publique en utilisant le module que je lui ai envoyé. Toujours ce problème est apparu. Merci – Sunil

+0

Les clés RSA ne sont pas simplement le module N mais il y a aussi un exposant E pour le chiffrement et un exposant D pour le décryptage. Ainsi, une clé publique est essentiellement (E, N) et une clé privée est (D, N). – laalto

+0

Non, nous pouvons créer une clé publique RSA en utilisant le module. – Sunil

2

Pour ajouter le post précédent, il est impossible de crypter/décrypter des données à grande échelle en utilisant le cryptage asymétrique (car il est nettement plus lent que le cryptage symétrique). L'utilisation la plus pratique du cryptage asymétrique (comme RSA) consiste à crypter les clés symétriques (pour AES ou algorithme similaire) qui ont été utilisées pour crypter les données et aussi pour signer un hachage sécurisé du résumé du message (SHA-256 etc).

Le message crypté est généralement scellé dans une "enveloppe" qui contient le message crypté ainsi que les clés utilisées pour le cryptage. Les clés sont bien entendu cryptées avec la clé publique des destinataires, assurant ainsi que seul le détenteur de la clé privée peut récupérer les clés. Enfin, l'expéditeur du message peut éventuellement calculer un hachage sécurisé du message et le crypter avec la clé privée de l'expéditeur. Le destinataire déchiffre le hachage crypté (en utilisant la clé publique de l'expéditeur) et compare avec le hachage calculé pour vérifier l'identité de l'expéditeur.

+0

Nombre maximal de données pouvant être chiffrées à l'aide de RSA = 117 octets, mais mes données ne concernent que 14 octets. – Sunil

+0

Sunil, Je ne suis pas très familier avec les API Java Crypto, mais le déchiffrement nécessite l'accès à la clé privée. Je suppose que le cipher.Init() a un moyen d'accéder à la clé privée basée sur le publicKey qui est passé? Puisque votre ami était capable de déchiffrer des données cryptées à l'aide de votre clé publique, lui avez-vous transmis la clé privée? –

Questions connexes