首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中加密JSON对象的最佳方法是什么?

在Java中加密JSON对象的最佳方法是什么?
EN

Security用户
提问于 2015-12-08 06:41:03
回答 2查看 34K关注 0票数 1

我有一个JSON数组:

代码语言:javascript
复制
JsonArray people;

它包含表示人的JSON对象。

目前,我正在将它们保存为json文件中的明文。

代码语言:javascript
复制
try {
    OutputStream out = new FileOutputStream('storage.json');
    JsonWriter writer = Json.createWriter(out);
    writer.writeArray(people);
    writer.close();
} 

但是,我希望对这些文件进行加密,使它们在没有密钥的情况下毫无价值。

做这件事最好的方法是什么?我是应该加密JSON数组对象,还是可以在编写它之前对整个数组进行加密?我应该使用的最推荐的Java密码函数是什么?

EN

回答 2

Security用户

发布于 2015-12-29 02:58:49

有很多方法可以做到这一点。

我将在整个文件级别加密JSON,而不是对其中的内容进行加密。另一种选择是复杂的,没有任何有意义的安全优势。我建议使用AEAD密码(我目前的建议是AES-256与GCM:又名AES/GCM/NoPadding,包含256位密钥)。要使用GCM,您需要使用Java 8或更高版本。要将AES-256与Oracle一起使用,您需要按文档的方式安装Java(密码扩展)无限强管辖权策略文件

您应该确保将身份验证标记设置为包含有关位置和使用的信息(真正的文件名是一个良好的开端),以使重命名或替换其他版本(一种形式的at-rest重放攻击)变得困难。

然而,加密JSON内容并不是一个完整的解决方案。它只是移动了一点球。如果攻击者仍然拥有对私钥的明文访问,那么它将无效。

要保护私钥明文,可以在单独的系统上使用KMS (密钥管理服务)。使用加密的JSON文件将私钥排除在机器上的内存访问之外。您将加密的文件内容提交给加载时要解密的KMS,或者在存储时向KMS提交加密的文件内容。

有了这些功能,您就可以有效地保护文件免受离线攻击(例如:磁盘映像分析、机器映像分析、备份盗窃、媒体盗窃)。如果没有进一步的防御措施,文件的内容仍然会受到机器本身内存的在线攻击。

票数 4
EN

Security用户

发布于 2015-12-29 20:13:45

最好对整个文件进行加密,然后按常规方式写入文件。读书也一样。下面是一个关于堆栈溢出的示例。

https://stackoverflow.com/questions/5632658/how-to-encrypt-or-decrypt-a-file-in-java

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/107528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档