Impossible de déchiffrer (AES) dans iOS (Swift) à partir de Java

Akhilesh Mani

Je ne parviens pas à déchiffrer les données sur iOS (Swift) que je reçois du serveur Java. Mais si je crypte une donnée sur iOS puis la décrypte, cela fonctionne bien. Il pourrait y avoir une certaine variation sur le code AES des deux côtés que je ne suis pas en mesure d'identifier. Aidez-moi, s'il vous plaît.

Question similaire posée ici : https://github.com/krzyzanowskim/CryptoSwift/issues/458

Décrypteur iOS

            let password = "SOME_ENCRYPTION_KEY"
            let iv = AES256Crypter.randomIv()
            let key = try AES256Crypter.createKey(password: password.data(using: .utf8)!, salt: salt)
            let aes = try AES256Crypter(key: key, iv: iv)
            let encryptedData = "encrypted_data".data(using: .utf8)
            let decryptedData = try aes.decrypt(encryptedData!)
            let decryptedString =  String(decoding: decryptedData, as: UTF8.self)
            print("Decrypted  string: \(decryptedString)")

Crypteur Java

SecretKeySpec secretKey;
        try {
            byte[] key = ENCRYPTION_KEY.getBytes("UTF-8");
            MessageDigest sha = MessageDigest.getInstance("SHA-1");
            key = sha.digest(key);
            key = Arrays.copyOf(key, 16);
            secretKey = new SecretKeySpec(key, "AES");

            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
        } catch (Exception e) {
            System.out.println("\nException while encrypting " + strToEncrypt + " \nerror: " + e.getMessage());
        }
Akhilesh Mani

Vous trouverez ci-dessous le code pour le cryptage en Java et le décryptage pour iOS (Swift et Android (Kotlin) . Cela fonctionne bien mais je suis toujours ouvert pour une meilleure solution.

Code Java

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class EncryptionUtils {

    private static String ENCRYPTION_KEY = "1234512345123456";

    public static void main(String[] args) {
        String encyString = new EncryptionUtils().encrypted("HJUSER153");
        System.out.println("Encrypted String:" + encyString);
     }

    public String encrypted(String strToEncrypt) {
         try {
            IvParameterSpec ivspec = new IvParameterSpec(ENCRYPTION_KEY.getBytes());

            SecretKeySpec keyspec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
            //encrypted = cipher.doFinal(text.getBytes());
        } catch (Exception e) {
            System.out.println("\nException while encrypting " + strToEncrypt + " \nerror: " + e.getMessage());
        }
        return null;
    }

}

Code Swift d'iOS

Ajoutez ceci dans le fichier pod - pod 'CryptoSwift'

import CryptoSwift

func decrypt(input:String)->String?{
        let key = "1234512345123456"
        do{
            let d=Data(base64Encoded: input)
            let decrypted = try AES(key: key, iv: key, padding: .pkcs5).decrypt(
                d!.bytes)
            return String(data: Data(decrypted), encoding: .utf8)
        }catch{

        }
        return nil
    }

Android

import android.util.Base64
import java.security.NoSuchAlgorithmException
import javax.crypto.Cipher
import javax.crypto.NoSuchPaddingException
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec

class CypherHelper {

    private var ivspec: IvParameterSpec? = null
    private var keyspec: SecretKeySpec? = null
    private var cipher: Cipher? = null
    private val ENCRYPTION_KEY: String = "1234567890123456"

    init {
        ivspec = IvParameterSpec(ENCRYPTION_KEY.toByteArray(Charsets.UTF_8))
        keyspec = SecretKeySpec(ENCRYPTION_KEY.toByteArray(), "AES")
        try {
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        } catch (e: NoSuchPaddingException) {
            e.printStackTrace()
        }
    }

    fun decrypt(valueToDecrypt: String): String {
        var decryptValue: String = ""
        val enc = CypherHelper()
        if (valueToDecrypt.isEmpty())
            decryptValue = String(enc.decryptInternal(valueToDecrypt)!!)

        return decryptValue
    }

    private fun decryptInternal(code: String?): ByteArray? {
        if (code == null || code.isEmpty()) {
            throw Exception("Empty string")
        }

        var decrypted: ByteArray? = null
        try {
            cipher?.init(Cipher.DECRYPT_MODE, keyspec, ivspec)
            decrypted = cipher?.doFinal(Base64.decode(code, Base64.DEFAULT))
        } catch (e: Exception) {
            throw Exception("[decrypt] " + e.message)
        }
        return decrypted
    }
}

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

Impossible de déchiffrer après AES-GCM + Base64 dans Go

Impossible de déchiffrer le GCM AES-256 avec Java

Impossible de déchiffrer la chaîne cryptée AES

impossible de déchiffrer le texte chiffré AES256

Impossible de déchiffrer à l'aide de pgcrypto à partir d'AES-256-CBC mais AES-128-CBC est OK

AES CBC Pas de remplissage donne des caractères supplémentaires dans déchiffrer JAVa

Impossible de déchiffrer le blob envoyé par le serveur Java dans le client python

Impossible de chiffrer/déchiffrer la chaîne à l'aide de Java/Kotlin

Impossible de déchiffrer le message chiffré en Java

Impossible de déchiffrer les données AES à l'aide d'Obj-C qui ont été chiffrées à l'aide de Java

Problèmes avec le cryptage AES. impossible de déchiffrer avec une clé droite

Impossible de déchiffrer le texte chiffré donné deux fois avec le même objet AES

RSA: chiffrer dans iOS, déchiffrer dans Java

Existe-t-il un moyen de chiffrer en java / kotlin et de déchiffrer en nodejs avec AES / CBC?

Python et OpenSSL: impossible de déchiffrer

impossible de déchiffrer la chaîne à partir du fichier texte

Impossible de capturer les valeurs de la ville et du pays à partir du SDK iOS de Facebook dans Swift

Impossible de supprimer la feuille de courrier électronique appelée à partir d'UIDocumentInteractionController dans iOS 8

Swift iOS -Impossible d'accéder à mes cours ou notifications à partir des fichiers de Cocopod

Comment puis-je déchiffrer un mot de passe dans le téléchargement d'un fichier SFTP à partir de Java

Impossible de déchiffrer à l'aide du module crypto dans Nodejs

Impossible d'obtenir NSMutableArray avec plusieurs objets à partir de UserDefaults dans Swift

Impossible de construire une URL à partir d'une chaîne contenant plusieurs ancres dans swift

Impossible de présenter AlertController à partir d'un UIView dans Swift

Comment déchiffrer les commentaires dans Verilog généré à partir de ciseau?

Impossible de déballer NSAppleEventDescriptor dans SWIFT

Comment déchiffrer un chiffrement de bits AES256 dans Golang qui a été chiffré dans nodejs?

Impossible de trouver la déclaration d'interface pour 'UIView' dans iOS Swift Project

Impossible de déchiffrer la chaîne de connexion à l'aide de la clé privée RSA dans .Net Core

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

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

  3. 3

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  4. 4

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  5. 5

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

  6. 6

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  7. 7

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

  8. 8

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  9. 9

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

  10. 10

    php ajouter et fusionner des données de deux tables

  11. 11

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

  12. 12

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  13. 13

    Comment changer la couleur de la police dans R?

  14. 14

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

  15. 15

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

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  21. 21

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

chaudétiquette

Archive