Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

147
Visualizações
Cifrado AES de Android Faltan bytes después de Cipher.doFinal

Estoy tratando de encriptar un flujo de entrada de Glide.

Convertí el flujo de entrada en una matriz de bytes y lo pasé en mi método de cifrado:

 fun encrypt(input: ByteArray): ByteArray { Log.e("TAG", "inputsize: ${input.size}") val iv = ByteArray(KeyStoreHelper.IV_SIZE) val secureRandom = SecureRandom() secureRandom.nextBytes(iv) val c = Cipher.getInstance(KeyStoreHelper.AES_MODE) c.init(Cipher.ENCRYPT_MODE, getKey(), GCMParameterSpec(KeyStoreHelper.GCM_SIZE, iv)) Log.e("TAG", "outputsize: ${c.getOutputSize(input.size)}") val encodedBytes = c.doFinal(input) Log.e("TAG", "encodedBytesSize: ${encodedBytes.size}") val byteBuffer = ByteBuffer.allocate( iv.size + encodedBytes.size) byteBuffer.put(iv) byteBuffer.put(encodedBytes) Log.e("TAG", "byteBuffer: ${byteBuffer.array().size}") return byteBuffer.array() }

Los registros se ven así:

 inputsize: 750683 outputsize: 750699 encodedBytesSize: 95339 byteBuffer: 95351

Como puede ver, la matriz de bytes de la imagen encriptada es demasiado pequeña y no entiendo por qué. Si trato de encriptar cadenas o imágenes más pequeñas (alrededor de 100kb-200kb), funciona de maravilla.

¡Gracias por ayudarme!

Saludos amables tom

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Parece que te has topado con un error, curiosamente en una ubicación ilógica: 95339 es un número primo. Casi pensarías que algún desarrollador dejó ese valor por propósito, en caso de que lo olvidara o para probar el equipo de prueba.

Sin embargo, no es una buena idea almacenar en caché todos los datos en la memoria para franjas de información tan grandes, incluso para GCM. Debería intentar usar la transmisión en su lugar. Puede usar CipherOutputStream para realizar el cifrado y CipherInputStream para el descifrado. Puede conectar estos flujos a otros flujos como FileOutputStream y FileInputStream para leer/escribir directamente en el sistema de archivos. También es posible escribir el IV en estos flujos subyacentes.

Tenga en cuenta que puede haber grandes diferencias en la forma en que los diferentes proveedores manejan GCM. Como ha notado, el asociado con el almacén de claves de Android se creó para la seguridad, de todos modos, de la clave, en lugar de la velocidad. Es posible que otras implementaciones de GCM no muestren este error. Tenga en cuenta que los proveedores disponibles pueden diferir entre diferentes plataformas Java(-esk) y versiones de estas plataformas.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda