存储aes加密数据的最佳方式

best way to store aes encrypted data

best/secure/easy 实现(本地)存储使用 AES 加密的数据的方法是什么? 似乎没有适当的指南或标准方法来存储数据,但在查看了一些使用 AES 加密的项目后,这些似乎是最常见的格式:

对于 csv - AES 加密数据可能包含“,”逗号,这可能会导致 csvs 出现问题

对于文本文件 - 如果每个项目有多个数据列,数据存储会像这样吗?;

item directory
|
|__ item's encrypted key1.txt
|
|__ item's encrypted key2.txt

解密数据时,程序是先解密实际文件,还是把文件内容读到内存再解密?

第一种方法似乎不安全,如果应用程序由于某种原因在文件被解密后崩溃,那么数据将被暴露,并且在重新加载和尝试解密已经解密的数据时也会导致问题。

存储数据的最佳方式是什么?以及写入数据应该如何实现(最好是java)

加密数据是一袋字节。它没有结构,不能呈现为文本。

存储它的明显方法是作为一袋字节:获取您的加密数据,打开一个FileOutputStream / Files.newOutputStream,然后写入它.逐字记录。

.txt 文件中加密数据很愚蠢。 CSV 甚至更疯狂。 它没有结构 - 如果你能在加密数据中检测到除随机噪音以外的任何东西,那么它就没有加密(可能 'slightly obfuscated in a way any serious hacker is not going to get fazed by in the slightest',我们不要称之为 'encryption').

你也不能压缩它(如果你想压缩数据,先压缩,然后加密它。如果你加密了一些东西,如果你再压缩它和它变小了,你的加密算法坏了!)-因此,开始写吧。

如果您需要通过不允许字节(仅允许文本)的通道传输加密数据,那么如果您使用不稳定的字符或编码并且受到限制,那么它允许的文本通常也会有问题,例如引号也不允许。这个问题的行业标准解决方案是获取任何字节串并使用 Base64 将其转换为安全的 ASCII 字符。请注意,这是低效的:X 字节的输入变成了 (X*4/3) 字节的 base64 字符串,例如它无缘无故地增长了 33%。

如果您需要通过电子邮件发送这些内容,这是个好主意,您希望人们能够在编辑器中打开该文件,然后 copy/paste 将其转换为 Web 表单,它需要进入HTML 文档的 data-x="" 属性,您想在 HTTP header 等中发送它。

for text files - if there are multiple data columns per item, would the data storing look like this?;

听起来你确实有一些结构化数据,比如代表一个人的一堆数据,比如说:

{
  "dob": "2000-01-01",
  "name": "Joey Bloggs",
  "parents": [
    "Anna Bloggs",
    "Jane Bloggs"],
  "hobbies": [
    {"name": "Painting", "started": "2020-05-01"}
  ]
}

并且您想通过保留结构来加密它,但只是加密其中的每个 'value'。类似于:

{
  "dob": "AJDNDA21489234JDASD9234",
  "name": "FDJFFDJADIDN235AFSFDS1243",
  "parents": [
    "SDJDDHRCDODFJF234",
    "D234ADFS9IT9CX"],
 ... and so on
}

这是一个非常糟糕的主意。光是这个结构就给了我很多信息(我不知道这是谁,但我知道他们有 1 个爱好和 2 个 parents。我什至大致知道 'long' 的名字parents 是!)。

只需要整个 blob 并加密整个东西