¿hay un equivalente dardo de la siguiente función de cifrado AES de en Java

Vaibhav Dikha:

He creado un servidor que está a la escucha de una matriz de bytes cifrados a través de la función de Java se mencionan a continuación. A principios yo estaba usando Java (androide) para construir mi aplicación por lo que fue fácil usando la misma función java, pero no soy capaz de averiguar lo que es el equivalente de dardos (aleteo) de esa función que toma una cadena como entrada y devuelve un cifrado AES matriz de bytes como de salida, que i puede escribir en el socket TCP.

También me lo agradecería ayuda en saber escribir la matriz de bytes generado para el servidor y luego leer una respuesta similar y descifrar a través de dardos (aleteo)

He tenido éxito en la escritura de cadenas simples y recibir cadenas simples como entrada y salida al servidor TCP a través de dardos, pero no puede hacer lo mismo para las matrices de bytes codificados. En java i utilizado DataOutputStream para enviar la respuesta al servidor de esta

DataOutputStream dOut = newDataOutputStream(socket.getOutputStream());

           byte[] s2 = Encrypt3.encrypt2(myString);

           dOut.writeInt(s2.length); // write length of the message
            dOut.write(s2);

Aquí está la función i java para el cifrado AES

import java.security.Key;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;


public class Encrypt3 {
public static String key = "mykey";

public static byte[] encrypt2(String text ){
    String encrypt ="";

    try{
        // Create key and cipher
        Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        // encrypt the text
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);
        byte[] encrypted = cipher.doFinal(text.getBytes());
        return encrypted ;
    }catch(Exception e){
        System.out.println(e);
    }
    return null ;
}


public static String decrypt2(byte[] encrypted2){
    String decrypt ="";
    try{
        Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        // decrypt the text
        cipher.init(Cipher.DECRYPT_MODE, aesKey);
        decrypt = new String(cipher.doFinal(encrypted2));
    }catch(Exception e){
        System.out.println(e);
    }

    return decrypt ;
}


}

Espero que el bytearray equivalente a producirse de dardo cuando se les proporciona una cadena como entrada, y luego escribir la matriz de bytes a un servidor TCP.

Gracias de antemano

Richard Heap:

La forma en que está configurando el cifrado por defecto de Java a modo de libro Código Electrónico (BCE), que no debe ser utilizado en un sistema de cifrado real. También está confiando en el relleno por defecto - PKCS5.

Utilizar el pointcastlepaquete, con las siguientes importaciones:

import 'package:pointycastle/api.dart';
import 'package:pointycastle/block/aes_fast.dart';
import 'package:pointycastle/paddings/pkcs7.dart';
import 'package:pointycastle/padded_block_cipher/padded_block_cipher_impl.dart';
import 'package:pointycastle/block/modes/ecb.dart';

Un equivalente aproximado en Dart es:

List<int> encrypt2(String text) {
  // key must be 16 or 32 bytes - not sure how "mykey" could work
  // key should really be binary, not a String! Better to use a KDF.
  Uint8List key = Uint8List.fromList(
    utf8.encode('0123456789abcdef'),
  );

  PaddedBlockCipher cipher = PaddedBlockCipherImpl(
    PKCS7Padding(), // Java defaults to PKCS5 which is equivalent
    ECBBlockCipher(AESFastEngine()), // Very weak mode - don't use this in the real world
  );

  cipher.init(
    true,
    PaddedBlockCipherParameters<CipherParameters, CipherParameters>(
      KeyParameter(key),
      null,
    ),
  );

  return cipher.process(utf8.encode(text)); // this isn't the same as .toBytes, except for ASCII
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192778&siteId=1
Recomendado
Clasificación