我是 Tink 的新手,想从 KeysetHandle 中提取原始密钥数据(以字符串形式),我生成如下:
keysetHandle = KeysetHandle.generateNew(
AeadKeyTemplates.AES128_GCM);
或者也许是其他一些 API 来获取它。
我怎样才能做到这一点?
我是 Tink 的新手,想从 KeysetHandle 中提取原始密钥数据(以字符串形式),我生成如下:
keysetHandle = KeysetHandle.generateNew(
AeadKeyTemplates.AES128_GCM);
或者也许是其他一些 API 来获取它。
我怎样才能做到这一点?
您可以使用需要加密的 KeysetHandle.write() 或其他 CleartextKeysetHandle.write() 将 Keyset 写入磁盘。两者都需要 BinaryKeysetWriter 或 JsonKeysetWriter。
示例会有所帮助。以下是您CleartextKeysetHandle.write()
用于观察密钥配置文件的方法:
试试这个显示:
// display key [Caveat: ONLY for observation]
public void display_key_profile_for_test_observation_only(KeysetHandle keysetHandle) throws IOException, GeneralSecurityException
{
System.out.println("\nDisplay key:");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
CleartextKeysetHandle.write(keysetHandle, JsonKeysetWriter.withOutputStream(outputStream));
System.out.println("\n"+ new String(outputStream.toByteArray()));
}
由于它属于一个类,您可能需要对代码进行一些细微的修改。this
您会看到表示代码片段来自一个类的关键字。下面是测试用法:
public void trial_usage_key_generation() throws IOException, GeneralSecurityException {
for (CIPHER_SYMMETRIC_ALGOS algo_type : CIPHER_SYMMETRIC_ALGOS.values()) {
System.out.println("Generating key for : " + algo_type);
KeysetHandle keysetHandle = this.generate_key_for_test_observation_only(algo_type);
this.display_key_profile_for_test_observation_only(keysetHandle);
}
}
您可以使用反射来获取键集,如下面的代码,或 JsonKeysetWriter 来获取 base64ed 键字节串(仍然需要反序列化为相应的键对象以获取原始键字节)。
KeysetHandle keysetHandle = KeysetHandle.generateNew(
AeadKeyTemplates.CHACHA20_POLY1305);
Method method = keysetHandle.getClass().getDeclaredMethod("getKeyset");
method.setAccessible(true);
Keyset keyset = (Keyset) method.invoke(keysetHandle);
ChaCha20Poly1305Key key = ChaCha20Poly1305Key.parseFrom(keyset.getKey(0).getKeyData().getValue());
byte[] keyBytes = key.getKeyValue().toByteArray();