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!!!
🙂 Una de las preguntas más buscadas por programadores java es la de crear componentes swing en tiempo de ejecución, eso[...]
Tor es la forma más fácil de navegar por internet de una manera segura y anónima, Tor cuenta con su propio navegador «T[...]
La Belleza está en la Simetría ¿Qué es lo que nos hace considerar un rostro bello? ¿Está influenciado nuestro criterio p[...]
«Be Internet Awesome» (Se genial en Internet) es un recurso de Google para la enseñanza de conceptos fundamentales sobr[...]
Cuando se realizan aplicaciones en java con base de datos y se llega a un punto donde es necesario realizar una consulta[...]
En este post construiremos un sencillo sistema Cliente/Servidor en lenguaje Java, el sistema consistirá básicamente en u[...]