如何在 DOTENV 文件上存储加密密钥?

How to store encryption key on DOTENV file?

所以我制作了一个加密给定字符串的程序,
加密很简单,在 DOTENV 文件中存储 ASCII 个字符值从 32 到 126,一个是普通字符串,存储从 32 到 126 的值,另一个字符串存储普通字符串的随机值


给定数据不是原始数据而是样本数据

DOTENV 文件中存储的数据:-

normalValue = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"

shuffledValue = "GKR6]^|hdv?\Icfs,TBrnt:C0F;p\"SA=U#l .&x<%u4V>XgZmq2Ozoi/_Nye[J{LW~1)`YHE-Qk'a!M*}bPj8D(9w5+3@"


正如你们所看到的,数据存储在双引号中,因为 DOTENV 不支持没有双引号的空格,并且因为 ASCII 从 32 到 126 的值在两个列表中都包含双引号,我不得不添加一个返回斜杠作为转义序列,因此该字符串在 DOTENV 中注册,因此程序在加密或解密时往往会中断,比如 hello 甚至这一段

"Linux 是一个基于 Linux 内核的开源类 Unix 操作系统系列,该操作系统内核于 1991 年 9 月 17 日由 Linus Torvalds 首次发布。”

工作正常,问题是有时我使用很长的文本来加密它会在某些字母上中断,因为我无法在 DOTENV 文件上存储原始数据并获取它,我似乎找不到解决这个问题的方法因为打乱后的字符串和普通字符串都需要这样,有人可以帮我解决这个问题吗?

我们不要使用术语 'encryption' 来表示这个微不足道的方案,它可能会误导某些人认为黑客需要超过 5 毫秒才能破解这个方案。

加密算法通常对字节进行运算。您对角色的独特看法,但您写的内容肯定是为了学习一些东西(我当然希望这不是为了保护信息免受那些不应该阅读的人的侵害,因为,oof,这不是方式),所以也许使用你用来在基于字符的存储系统中存储任意字节的技术是有用的,并且 非常 限制它支持的字符(你得到的只是 ASCII 的一个子集).有许多系统都是这样工作的:配置文件、电子邮件、Web URL 中的参数等等。

解决方案是base64。这将字节编码为 75% 的效率(您需要 4 个字符来存储 3 个字节),作为字符,这些字符将在几乎所有内容中存活,并在任何配置环境中工作。

Base64 class 将为您处理转换。你处在一个奇怪的场景中,你的加密数据是字符串形式(它应该是字节形式!),但有一个简单的解决方案:

byte[] data = theString.getBytes(StandardCharsets.UTF_8);
String copyOfTheString = new String(data, StandardCharsets.UTF_8);

允许您从 String 转换为 byte[],反之亦然(这样您就可以将 byte[] 视为您需要保存的数据,方法是使用 Base64 将其编码为安全字符串,然后存储安全字符串)。

注意:如果这不是学习练习,但您实际上是想保护信息不被窥视,基本解决方案是 AES256 之类的东西,它已融入 java,您可以找到免费的并通过随意搜索网络来打开它的实现。请注意,围绕使用这种算法非常容易搞乱脚手架:该算法是安全的(如果地球上有人可以破解 AES 加密,他们一年可以轻松赚取数亿美元,如果他们正确地打牌),但您对它的特定用法可能并非如此。