本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
谷歌最近又发布了一个新的开源工具集 Tink。Tink 是一个多语言,跨平台的库,提供安全,易于正确使用和难以滥用的加密 API。我预测它可能会火起来,所以就先简单介绍一下它的用法。
Tink 遵循 Apache 的 2.0 开源协议。Tink 并不是官方支持的 Google 产品。而是由 Google 的一群密码学家和安全工程师编写的加密库。
Tink 结合了 Google 产品团队的丰富经验,修复了现实开发、部署、测试中的一些弱点,并提供了可以安全使用而无需加密背景的简单 API。
Tink 提供的安全 API 易于正确使用且难以滥用。它通过以用户为中心的设计,仔细的实施和代码审查以及广泛的测试来减少常见的加密陷阱。在谷歌,Tink 已被用于保护许多产品的数据,如 AdMob,Google Pay,Google Assistant,Firebase,Android Search App 等。
快速开始
在使用 Tink 之前推荐大家先安装 Bazel。然后执行下面的 Bazel 命令即可看到构建后的运行效果:
git clone https://github.com/google/tink cd tink bazel build ... echo foo > foo.txt ./bazel-bin/examples/helloworld/java/helloworld encrypt --keyset test.cfg --in foo.txt --out bar.encrypted ./bazel-bin/examples/helloworld/java/helloworld decrypt --keyset test.cfg --in bar.encrypted --out foo2.txt cat foo2.txt
Tink通过所谓的基元执行加密任务,每个基元通过指定基元功能的相应接口来定义。例如,对称密钥加密是通过AEAD原语(带有关联数据的Authenticated Encryption)提供的,它支持两种操作:
- encrypt(plaintext, associated_data),加密给定的plaintext (使用associated_data另外的AEAD输入)并返回生成的密文
- decrypt(ciphertext, associated_data),解密给定的 ciphertext(使用associated_data另外的AEAD输入)并返回结果明文
在可使用基元的实现之前,必须在运行时使用 Tink 注册它们,以便 Tink “知道”所需的实现。以下是如何在Tink中注册所有基元的所有实现:
import com.google.crypto.tink.config.TinkConfig; TinkConfig.register();
在注册了基元的实现之后,Tink的基本用法分三步进行:
- 加载或生成加密密钥材料(Keyset以Tink术语表示)。
- 使用密钥材料获取所选基元的实例。
- 使用该原语来完成加密任务。
以下是在 Java 中使用 Tink 加密或解密时的步骤:
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; // 1.生成密钥材料。 KeysetHandle keysetHandle = KeysetHandle.generateNew( AeadKeyTemplates.AES128_GCM); // 2.获取 Aead 原语 Aead aead = AeadFactory.getPrimitive(keysetHandle); // 3.使用原语。 byte[] ciphertext = aead.encrypt(plaintext, aad);
Tink 目前除了支持 java 外,还支持 Android、C++、Obj-C。目前最新版本是 2018-08-09 发布的 1.2.0。
参考资料
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » 谷歌 Tink(加密API) 教程