Problème avec la chaîne de déchiffrement qui est chiffrée dans iOS AES / CBC / PKCS7 Ajout de l'algorithme 128 bits sous Android

Bhoomika Patel

Guidez-moi là-dessus. Je suis confronté à un problème avec le déchiffrement de la chaîne qui est cryptée par iOS "AES / CBC / PKCS7Padding". Il jette une exception. Je veux déchiffrer la chaîne dans Android, qui est cryptée dans iOS.

Sous Android, je suis cette structure:

For Example: 
  String text = "rzp_test_DezQO1BVMXhkZY";
  String key = "5b0904cfada01b8182bcc029b928244d"; // secret key - 128 bit key
  String iv_key ="c999cbd1f130db1d";

Je veux crypter et décrypter la chaîne de «texte» mentionnée ci-dessus. Si je fais du cryptage et du décryptage depuis Android uniquement. puis son fonctionnement très bien. mais si j'ai essayé de déchiffrer la clé qui est cryptée dans iOS, cela génère des erreurs.

// Create key and cipher

Cipher dcipher, d1cipher;

      IvParameterSpec ivSpec = new IvParameterSpec(iv_key.getBytes());
      Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); 

      ecipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
      dcipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

      ecipher.init(ENCRYPT_MODE, aesKey, ivSpec);
      dcipher.init(DECRYPT_MODE, aesKey, ivSpec);

Cryptage Algo:

  public String encrypt(String str) throws Exception {
        // Encode the string into bytes using utf-8
        byte[] utf8 = str.getBytes("UTF8");

        // Encrypt
        byte[] enc = ecipher.doFinal(utf8);

        // Encode bytes to base64 to get a string
        return Base64.encodeToString(enc, Base64.DEFAULT);
    }

Décryptage quelque chose:

 public String decrypt(String str) throws Exception {
        // Decode base64 to get bytes
        String decrypted = "";
        try {
            byte[] dec = Base64.decode(str, Base64.DEFAULT);

            byte[] utf8 = dcipher.doFinal(dec);

            // Decode using utf-8
            decrypted = new String(utf8, "UTF8").trim();

        } catch (Exception e) {


            e.printStackTrace();
        }

        return decrypted;
    }

Il fonctionne bien sous Android pour le cryptage et le décryptage. Vérifiez avec ceci:

String encrypted = encrypt(text);
System.out.println("Encrypted String: " + encrypted);

String decrypted = decrypt(encrypted);
System.out.println("Decrypted String: " + decrypted);

Le problème est de déchiffrer la chaîne cryptée ci-dessous à partir d'ios, cette erreur génère:

   String decrypted1 = decrypt("c7076c78fc5d9d92c1d86c1500dcc0366ddf1b6e32df00ceadc911239935460d");
   System.out.println("Decrypted String1: " + decrypted1);

L'erreur est:

W/System.err: javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
W/System.err:     at com.android.org.conscrypt.NativeCrypto.EVP_CipherFinal_ex(Native Method)
W/System.err:     at com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER.doFinalInternal(OpenSSLCipher.java:570)
W/System.err:     at com.android.org.conscrypt.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:351)
W/System.err:     at javax.crypto.Cipher.doFinal(Cipher.java:1741)
W/System.err:     at com.example.aesencryption.Activities.MainActivity1.decrypt(MainActivity1.java:178)

N'importe qui peut me guider sur ce point ??

Sous IOS:

Les fonctions suivantes sont utilisées.

func aesEncrypt() -> String {

        let iv: [UInt8] = Array(AES_IV.utf8)
        let key: [UInt8] = Array(AES_SECRET.utf8)

        do{
            let encrypted = try AES (key: key, blockMode: CBC(iv: iv)).encrypt([UInt8](self.data(using: .utf8)!))
            return Data(encrypted).base64EncodedString()
        }
        catch{
            print("error on encrypting data ")
            return ""
        }

    }

    func aesDecrypt() -> String {

        let iv: [UInt8] = Array(AES_IV.utf8)
        let key: [UInt8] = Array(AES_SECRET.utf8)
        do{
            guard let data = Data(base64Encoded: self) else { return "" }
            let decrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).decrypt([UInt8](data))
            return String(bytes: decrypted, encoding: .utf8) ?? self
        }
        catch{
            print("error on encrypting data ")
            return ""
        }

    }
Bhoomika Patel

J'ai obtenu une vraie chaîne en utilisant la méthode suivante.

  public static String decryptKey(String key_id) {
            // Decode base64 to get bytes
            String decrypted = "";
            try {

                Cipher dcipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

                dcipher.init(DECRYPT_MODE, aesKey, ivSpec);

                byte[] utf8 = dcipher.doFinal(hexToBytes(key_id));

                // Decode using utf-8
                decrypted = new String(utf8, "UTF8").trim();

            } catch (Exception e) {


                e.printStackTrace();
            }

            return decrypted;
        }

     public static byte[] hexToBytes(String str) {
            if (str == null) {
                return null;
            } else if (str.length() < 2) {
                return null;
            } else {
                int len = str.length() / 2;
                byte[] buffer = new byte[len];
                for (int i = 0; i < len; i++) {
                    buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);
                }
                return buffer;
            }
        }

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive