github 密码学是一门复杂的学科,对于开发人员来说应该做到的大概是
在开发中我们可以直接使用Tink进行一些加密相关操作
在Tink中提供了Aead、DeterministicDead、Hybrid、Mac及signature的支持。从包结构看Tink的构成
通过官方demo我们可以知道Tink的使用方式。
// 运行时必须先使用Tink注册基元,以便让Tink知道所需的实现。
TinkConfig.register();
// 1.加载或生成加密密钥材料(Tink术语表示的KeySet)
KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
// 2.使用密钥材料获取所选的基元的实例
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3.使用基元实例来完成加密任务
byte[] ciphertext = aead.encrypt(plaintext, associatedData);
由于Tink代码是按照加密的类型分包,所以具体的使用方式也比较容易推敲
从AeadKeyTemplates中可以知道Tink支持了7种aead算法,分别是
通过AeadFactory获取了Aead的实例,在AeadFactory中可以看到具体的加密、解密是的实现方式,我们可以直接通过其中的方法进行加密、解密,使用方式与上面代码差不多,只需替换Templates
注意事项
在运行过程中AES256会因为jre环境中的加密包不是授权版本的,需要单独下载替换。 参考
仅提供了AES256_SIV加密算法的支持 使用DeterministicAeadFactory生成DeterministicAead实例,进行加密、解密操作
从HybridKeyTemplates可知,Tink支持以下hybrid算法
存在两个Factory,分别用于生成加密基元和解密基元
从MacKeyTemplates可知,Tink支持了以下mac算法
使用MacFactory获取Mac实例
从SignatureKeyTemplates可知,支持以下签名算法
两个Factory,分别用于获取加签、验签的基元实例
这两个包中包含了加密算法的一些实现细节,对密码学有兴趣的话可以看一下这些由Google安全专家编写的代码,其中也有一些工具类如Bytes、Hex、Base64