Je crypte en ojb-c avec SecKeyEncryptedData et j'essaye de décrypter en Java avec javax.Cipher et je rencontre un problème.
Je suis récemment passé à faire de longs blocs et j'ai dû utiliser un cryptage symétrique avec la clé AES cryptée avec la paire de clés asymétriques. J'ai des problèmes de décodage.
J'ai la clé iOS kSecKeyAlgorithmRSAEncryptionPKCS1 travaillant pour des données asymétriques assorties à Cipher.getInstance ("RSA / ECB / PKCS1Padding") en Java. Cela décode les blocs courts.
Comme j'ai besoin d'envoyer des blocs plus longs et que j'essaie de passer à kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM sur iOS et qu'il crypte bien, mais je ne trouve pas la méthode à utiliser dans Cipher pour le décrypter et je ne comprends pas si cela doit être fait en 2 étapes dans le cloud en Java.
OBJ-C: Java: SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM; NSData* cipherText = nil; cipherText = (NSData*)CFBridgingRelease( // ARC takes ownership
SecKeyCreateEncryptedData(self.pubKey, algorithm, (__bridge CFDataRef)data, &error)); try { cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, priv); byte[] dog = decoder.decode(encString); dec = cipher.doFinal(dog); res = new String(dec);
} // handle errors
Le décodage échoue évidemment.
Ma question est donc en 2 parties.
y a-t-il un type de chiffrement qui fera le décodage nécessaire
Vous pouvez lire la documentation de Cipher . Je crois que tu cherchesRSA/ECB/OAEPWithSHA-256AndMGF1Padding
Je vois que la désignation ne correspond pas exactement au nom Obj-C, mais c'est une norme courante, donc cela vaut la peine d'essayer
Comme j'ai besoin d'envoyer des blocs plus longs et que j'essaye de passer à kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM
Vous pouvez essayer de rechercher «cryptage hybride». Les chiffrements asymétriques sont TRÈS lents par rapport aux chiffrements symétriques et sont destinés à ne chiffrer qu'une quantité limitée de données.
Certaines implémentations peuvent quand même crypter des données plus longues (pour chaque entrée de 256 bits fournissant une sortie de 2048 ou 4096 bits), Java se plaindra simplement et s'arrêtera
Un cryptage approprié serait donc
Si le kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM
ne serait pas homologue (compatible) avec RSA/ECB/OAEPWithSHA-256AndMGF1Padding
, vous pouvez toujours utiliser le remplissage PKCS # 1 1.5 (l'ancien) avec cette approche.
Edit: cette réponse peut être utile lorsque vous travaillez avec OAEP aussi RSA / ECB / OAEPWithSHA-256AndMGF1Padding mais avec MGF1 utilisant SHA-256?
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots