Java基础、中级、高级、架构面试资料

谷歌 Tink(加密API) 教程

JAVA herman 21057浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日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的基本用法分三步进行:

  1. 加载或生成加密密钥材料(Keyset以Tink术语表示)。
  2. 使用密钥材料获取所选基元的实例。
  3. 使用该原语来完成加密任务。

以下是在 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) 教程