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.
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:
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!!!
En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e[...]
JSON es un formato de texto ligero para el intercambio de datos ampliamente usado en los Servicios Web. En este post uti[...]
Hace un par de años atras google para el aniversario del juego de Pacman saco un doodle en su homenaje, ese doodle que s[...]
En este post dejo el código fuente de un blog en PHP desarrollado siguiendo el patrón de diseño MVC (Modelo, Vista y Con[...]
En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial[...]
En este tutorial Android Bolivia 🙂 construiremos una sencilla aplicación para realizar llamadas por teléfono, aprenderem[...]