存储aes加密数据的最佳方式
best way to store aes encrypted data
best/secure/easy 实现(本地)存储使用 AES 加密的数据的方法是什么?
似乎没有适当的指南或标准方法来存储数据,但在查看了一些使用 AES 加密的项目后,这些似乎是最常见的格式:
- XML
- 文本文件
- csv
对于 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 并加密整个东西。
best/secure/easy 实现(本地)存储使用 AES 加密的数据的方法是什么? 似乎没有适当的指南或标准方法来存储数据,但在查看了一些使用 AES 加密的项目后,这些似乎是最常见的格式:
- XML
- 文本文件
- csv
对于 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 并加密整个东西。