Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Tink biblioteca criptográfica de Google

Tink biblioteca criptográfica de Google

Por jc mouse jueves, junio 6, 2019

Tink es una biblioteca de cifrado desarrollada por un grupo de criptógrafos e ingenieros de seguridad de Google lanzado en el 2018, es una biblioteca criptográfica multiplataforma disponible para Java, Android, C++ y Obj-C. La ultima versión disponible a la fecha de este post es la 1.2.2.

API criptografia

La API de Tink reduce los errores comunes de cifrado con un diseño centrado en el usuario, una implementación cuidadosa y revisiones de código, y pruebas exhaustivas. Google, utiliza Tink para proteger datos de muchos productos como AdMob, Google Pay, Google Assistant, Firebase, Android Search App, etc.

Para agregar Tink a tus proyectos puedes utilizar Maven, por ejemplo:

<dependency>
  <groupId>com.google.crypto.tink</groupId>
  <artifactId>tink</artifactId>
  <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.8.0</version>
</dependency>

O si estas utilizando Android:

implementation {
  compile 'com.google.crypto.tink:tink:latest'
}

Los principales objetos que utiliza Tink se denominan primitivos y contienen diferentes funciones criptográficas. Estas son:

  • AEAD: AES-EAX, AES-GCM, AES-CTR-HMAC, KMS Envelope, CHACHA20-POLY1305
  • Streaming AEAD: AES-GCM-HKDF-STREAMING, AES-CTR-HMAC-STREAMING
  • Deterministic: AEAD AEAD: AES-SIV
  • MAC: HMAC-SHA2
  • Digital Signature: ECDSA over NIST curves, ED25519
  • Hybrid Encryption: ECIES with AEAD and HKDF, (NaCl CryptoBox)

Por ejemplo, el siguiente código utiliza Tink para cifrar/descifrar un texto mediante AEAD (Authenticated Encryption with Associated Data).

import com.google.crypto.tink.aead.AeadConfig;
import com.google.crypto.tink.config.TinkConfig;
import com.google.crypto.tink.Aead;
import com.google.crypto.tink.KeysetHandle;
import com.google.crypto.tink.aead.AeadFactory;
import com.google.crypto.tink.aead.AeadKeyTemplates;
import java.security.GeneralSecurityException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/** 
 * @see http://www.jc-mouse.net/
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {
        try {
            //Registro de Tink y AEAD
            TinkConfig.register();
            AeadConfig.register();
            
            KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);

            String plaintext = "DETERMINACION + DISCIPLINA + TRABAJO FUERTE = CAMINO DEL ÉXITO";
            String associatedData = "jc mouse";
            
            Aead aead = AeadFactory.getPrimitive(keysetHandle);
            
            //Encripta texto
            byte[] ciphertext = aead.encrypt(
                    plaintext.getBytes(StandardCharsets.UTF_8),
                    associatedData.getBytes(StandardCharsets.UTF_8));
            String cipherText = new String(Base64.getEncoder().encode(ciphertext));
            System.out.println("Texto cifrado: " + cipherText);

            //Desencripta texto
            String decrypted = new String(aead.decrypt(ciphertext, associatedData.getBytes()));
            System.out.println("Texto descifrado: " + decrypted);            
            
        } catch (GeneralSecurityException ex) {
            System.err.println(ex.getMessage());
        }
    }

}

Y ejecutando tenemos:

Texto cifrado: ASZwXZs7WWszoLCnurnv6WZCsdTTE6yHkw/5TolfFnEp2jScpEiHKdZN0Ik0lxMlaiQkK2o6LlgthDZV2qqpo/w2NK4ofTbsloqhyymSbOsTu6lxuryIXBSB5d3F87Ra
Texto descifrado: DETERMINACION + DISCIPLINA + TRABAJO FUERTE = CAMINO DEL ÉXITO

Puedes obtener más información sobre Tink en su repositorio en GitHub.

enjoy!!!

Tags

Artículos similares

Arrastrar y cargar archivo Excel *.xlsx en tabla Java

A continuación tenemos una clase que nos permite arrastrar un archivo de Excel (*.xlsx) y cargar su contenido en una tab[...]

Introducción a SQLite

Android hace uso de la base de datos SQLite para el manejo de registros en las aplicaciones. Según Santa Wikipedia defin[...]

Crea App multilenguaje con Android Studio

En este post aprenderemos los pasos básicos para construir una aplicación android con soporte multilenguaje, utilizaremo[...]

Crea un JButton con sonido para tus aplicaciones

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas[...]

FossFLOW – Herramienta de diagramación isométrica de código abierto

FossFLOW es una potente aplicación web progresiva (PWA) de código abierto para crear atractivos diagramas isométricos, s[...]

Crea tu JLabel con hipervinculo

Si queremos añadir un enlace web a una aplicación en java, podemos hacer uso de botones o etiquetas, incluso se puede añ[...]