我有一个密钥(例如)“ thisist0psecret”,我想将其用作Google Tink library的对称加密/解密密钥。我为自己做不到这一简单的事情而感到困惑。我可以生成新密钥(使用各种模板AES128_GCM等),对其进行序列化,然后使用KeysetReader将其读回。但是,对于我一生来说,我无法弄清楚如何使用指定的特定密钥字节创建对称密钥。

例如,我可以使用Tink进行以下操作:

KeysetHandle ksh = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
Aead aead = AeadFactory.getPrimitive(ksh);
String pt = "hello, world!";
byte[] encbytes = aead.encrypt(pt.getBytes(), null);
byte[] decbytes = aead.decrypt(encbytes, null);
String orig = new String(decbytes);
assert(pt.equals(orig));


但是我想将对称密钥字符串设置为我指定的一组字节,例如“ thisist0psecret”,然后使用将进行解密的用户的公共密钥对该密钥进行加密。

这里有任何Google Tink专家可以提供帮助吗?

最佳答案

我是Tink的首席开发人员。

如果密钥是随机生成的,则可以直接使用微妙的API,请参见:https://github.com/google/tink/blob/master/java/src/main/java/com/google/crypto/tink/subtle/AesGcmJce.java

不建议这样做,因为细微的层可能会更改,而不会发出通知(在Tink的历史中,它相对稳定)。

如果您的密钥是密码,则要使用Scrypt或PBKDF2之类的方法从中派生密钥。我们尚未在Tink中支持基于本地密码的加密,请提出功能请求,我们将为您提供帮助。

08-05 02:17