4

我是 Tink 的新手,想从 KeysetHandle 中提取原始密钥数据(以字符串形式),我生成如下:

keysetHandle = KeysetHandle.generateNew(
                    AeadKeyTemplates.AES128_GCM);

或者也许是其他一些 API 来获取它。

我怎样才能做到这一点?

4

3 回答 3

2

您可以使用需要加密的 KeysetHandle.write() 或其他 CleartextKeysetHandle.write() 将 Keyset 写入磁盘。两者都需要 BinaryKeysetWriter 或 JsonKeysetWriter。

于 2019-01-17T23:18:30.560 回答
1

示例会有所帮助。以下是您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);
            }
       }
于 2019-06-21T18:20:18.167 回答
0

您可以使用反射来获取键集,如下面的代码,或 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();
于 2019-09-11T13:51:02.653 回答