什么是(本地)存储已使用AES加密加密的数据的最佳/安全/易于实现的方法?似乎没有一个适当的指南或标准的方式来存储数据,但在看了一些使用AES加密的项目后,这些似乎是最常见的格式:
csvfor csv - AES加密数据可能包含','逗号,这可能会导致csv的问题
用于文本文件—如果每个项目有多个数据列,数据存储会像这样吗?
item directory
|
|__ item's encrypted key1.txt
|
|__ item's encrypted key2.txt
在解密数据时,程序应该解密实际文件还是将文件的内容存入内存然后再解密?
第一种方法似乎是不安全的,如果应用程序在文件被解密后由于某种原因崩溃,那么数据将被暴露,当重新启动并试图解密已经解密的数据时,它将导致问题。
存储数据的最佳方式是什么?写数据应该如何实现(最好是java)
加密的数据是一袋字节。它没有结构,不能呈现为文本。
最明显的存储方式是将存储为一组字节:取你的加密数据,打开FileOutputStream
/Files.newOutputStream
,并写入。逐字.
在.txt
文件中加密数据是愚蠢的。CSV甚至更疯狂。没有结构-如果你能在加密数据中检测到除了随机噪声之外的任何东西,那么它就没有加密(也许"稍微混淆了一点,任何严肃的黑客都不会受到丝毫困扰",让我们不要称之为"加密")。
你也不能压缩它(如果你想压缩数据,先压缩,然后)加密它。如果你加密了一些东西,如果你压缩它,它变得更小,你的加密算法被破坏了!)-因此,只要开始写。
如果你需要通过一个不允许字节,只允许文本的通道传输加密数据,那么如果你使用不稳定的字符或编码,通常它允许的文本也是有问题的,并且在引号中也不允许。这个问题的行业标准解决方案是使用Base64将任意一串字节转换为安全的ASCII字符。请注意,这是低效的:X字节的输入变成了一个(X*4/3)字节的base64字符串,例如,它无缘无故地增长了33%。
如果你需要在电子邮件中发送这些东西,这是一个好主意,你希望人们能够在编辑器中打开文件并将其复制/粘贴到web表单中,它需要在HTML文档的data-x=""
属性中,你想在HTTP头中发送它,等等。
用于文本文件—如果每个条目有多个数据列,数据存储是否看起来像这样?;
听起来好像你有一些结构化数据,比如一堆代表一个人的数据,比如:
{
"dob": "2000-01-01",
"name": "Joey Bloggs",
"parents": [
"Anna Bloggs",
"Jane Bloggs"],
"hobbies": [
{"name": "Painting", "started": "2020-05-01"}
]
}
,你想通过保留结构来加密它,但只是加密其中的每个"值"。比如:
{
"dob": "AJDNDA21489234JDASD9234",
"name": "FDJFFDJADIDN235AFSFDS1243",
"parents": [
"SDJDDHRCDODFJF234",
"D234ADFS9IT9CX"],
... and so on
}
这是一个非常糟糕的主意. 这个结构本身就给了我大量的信息(我不知道这是谁,但我知道他们有一个爱好和两个父母)。我甚至大概知道父母的名字有多长!
取整个blob并加密整个