com.google.gson.gson班级与Javax.crypto.secretkey失败



我在某些加密操作过程中存储了SecretKey,我以后需要使用。存储时,我将其转换为字符串:

String keyAsString = new Gson().toJson(key);

但是,在检索过程中,无法以下代码:

   SecretKey secKey =  new Gson().fromJson(keyAsString, SecretKey.class);

,即使使用详细消息过滤器,我也没有在logcat中获得任何提示。我尝试使用以下调试点围绕Try Catch中的代码进行围绕代码(希望我在调试时能得到任何例外跟踪(:

try {
SecretKey secKey =  new Gson().fromJson(keyAsString, SecretKey.class); // One debug point here
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e)); // And one debug point here
}

但是,调试器不会在两个调试点上停止,在设备应用程序上立即崩溃,不幸的是应用程序崩溃了消息。

SecretKey保存的JSON结构如下:

{
  "algorithm": "AES",
  "key": [
   integer1, integre2, ....
  ]
}

注意:Integer1,Integer2 ...是用于安全目的的实际数字,我没有发布原始结果编号。

可能出了什么问题?是否不允许使用SecretKey的这种存储?

update

将SecretKey转换为JSON String&反之亦然,使用GSON是个坏主意,正如Jonathanrz在下面回答的那样,我遵循了他的回答&在Android中写了两个实用程序,以将SecretKey转换为String&VICE VERSA功能如下:

public static String secretKeyToString(SecretKey key) {
  return Base64.encodeToString(key.getEncoded(), Base64.DEFAULT);
}
public static SecretKey encodedStringToSecretKey(String encodedKey) {
  byte[] decodedKey = Base64.decode(encodedKey, Base64.DEFAULT);
  return new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
}

您应该将密钥解析为字符串,然后使用secretkeyfactory.translatekey来解析键。

更新:编辑了问题后,我看到您的输出不仅仅是一个字符串。因此,您需要创建一个代表您的JSON的类,用它来解析响应,然后用TranslateKey构建每个键。GSON只能在类具有与JSON中的键相同的名称和相同类型的属性时解析JSON,SecretKey并非如此。

Update2:TranslateKey无法从字符串创建密钥。从字符串中创建键的选项是:将秘密键转换为字符串,反之亦然

相关内容

  • 没有找到相关文章

最新更新