Crypter avec le module Crypto Node.js et décrypter avec Java (dans l'application Android)

Chut:

Recherche d'un moyen de crypter des données (principalement des chaînes) dans un nœud et de les décrypter dans une application Android (java).

Je l'ai fait avec succès dans chacun d'entre eux (chiffrer / déchiffrer dans le nœud et chiffrer / déchiffrer en java) mais n'arrive pas à le faire fonctionner entre eux.

Peut-être que je ne crypte / décrypte pas de la même manière, mais chaque bibliothèque dans chaque langue a des noms différents pour les mêmes choses ...

Toute aide appréciée.

voici du code: Node.js

var crypto = require('crypto')
var cipher = crypto.createCipher('aes-128-cbc','somepass')
var text = "uncle had a little farm"
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex')
//now crypted contains the hex representation of the ciphertext

et java

private static String decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec );
    byte[] decrypted = cipher.doFinal(encrypted);
    return new String(decrypted);
}

la clé brute est créée comme ceci

private static byte[] getRawKey(String seed) throws Exception {
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    byte[] seedBytes = seed.getBytes()
    sr.setSeed(seedBytes);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}

tandis que la chaîne hexadécimale chiffrée est convertie en octets comme celui-ci

public static byte[] toByte(String hexString) {
    int len = hexString.length()/2;
    byte[] result = new byte[len];
    for (int i = 0; i < len; i++)
        result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
    return result;
}
Nikolay Elenkov:

Apparemment, si vous lui passez une phrase de passe, crypto.createCipher()il utilise OpenSSL EVP_BytesToKey()pour dériver la clé. Vous pouvez passer un tampon d'octets brut et l'utiliser pour initialiser Java SecretKey, ou émuler EVP_BytesToKey()dans votre code Java. Utilisez $ man EVP_BytesToKeypour plus de détails, mais essentiellement, il hache la phrase secrète plusieurs fois avec MD5 et concatène un sel.

Quant à l'utilisation d'une clé brute, quelque chose comme ceci devrait vous permettre d'utiliser une clé brute:

var c = crypto.createCipheriv("aes-128-ecb", new Buffer("00010203050607080a0b0c0d0f101112", "hex").toString("binary"), "");

Notez que puisque vous utilisez CBC, vous devez utiliser le même IV pour le cryptage et le décryptage (vous voudrez peut-être l'ajouter à votre message, etc.)

Avertissement obligatoire: implémenter vous-même un protocole cryptographique est rarement une bonne idée. Même si cela fonctionne, allez-vous utiliser la même clé pour tous les messages? Pour combien de temps? Si vous décidez de faire tourner la clé, comment gérer cela. Etc.

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

Crypter avec Crypto.JS et décrypter avec PHP 7.3

Comment crypter et décrypter à l'aide de Camellia 128 bits dans le code JAVA Android?

Crypter dans CryptoJS et décrypter dans le module NodeJS Crypto

comment crypter / décrypter avec crypto-js

Crypter avec JAVA (jasypt) et décrypter avec PHP

Crypter et décrypter avec le mode AES ECB 'BadPaddingException' dans certains cas

Crypter dans Java Android et décrypter dans C # Unity

Crypter dans le nœud et décrypter en java

Crypter et décrypter avec RSA OAEP

Comment crypter les données dans node.js à l'aide de node-rsa et décrypter les données cryptées dans Android ?

Crypter la charge utile à l'aide d'une clé et iv par l'algorithme AES / GCM / NoPadding dans le nœud js et décrypter en java

Crypter un fichier dans node et décrypter en java en utilisant "AES / GCM / NoPadding". Fondamentalement, l'équivalent AES / GCM / NoPadding dans node.js

Comment enregistrer une chaîne cryptée dans Firebase avec Dart Flutter et décrypter dans l'application ?

Crypter avec Node.js AES CTR et déchiffrer avec PyCrypto

Crypter avec CryptoJS et décrypter avec php: à quoi sert l'IV?

Comment crypter un objet JSON avec JS-NaCl et décrypter avec php Libsodium

Crypter avec CryptoJS et décrypter avec PHP

Crypter par mcrypt et décrypter par openssl avec le mode CBC et chiffrer BLOWFISH

Crypter l'horodatage dans Nodejs et décrypter dans l'application R shiny

Crypter et décrypter avec l'encodage AES et Base64

Crypter et décrypter les données à l'aide de Blowfish avec Coldfusion et .NET / BouncyCastle

Comment crypter et décrypter le dataframe pandas avec la clé de décryptage?

Crypter et décrypter AES avec Golang et Ruby

Node JS - Crypter / Décrypter

Décrypter le fichier PDF côté client et le visualiser avec pdf.js

Comment crypter et décrypter du texte brut avec une clé RSA dans Go?

comment crypter et décrypter avec AES CBC 128 dans Elixir

Crypter et décrypter un fichier volumineux avec AES

C - Crypter et décrypter une chaîne avec AES

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