security - 如何用 4 个浮点数加密 1 个浮点数
问题描述
这是一个很难描述的问题,而且我对密码学很幼稚。所以请原谅我,因为我试图解释这一点。
我有一个 32 位浮点值,这是“源”浮点数。然后我有四个 32 位浮点值,这些是“关键”浮点数。
我想用四个“关键”浮点数以某种方式编码或混淆一个“源”浮点数。然后将生成的“编码源”浮点数存储为 4 个“编码”浮点数。因此,如果你有这四个“编码”浮点数、四个“关键”浮点数和“编码源”浮点数,那么您就可以得到原始的“源”浮点数。
这是一个粗略的例子:
// Crude encoding
float encoded0 = Random.Range(-1, 1);
float encoded1 = Random.Range(-1, 1);
float encoded2 = Random.Range(-1, 1);
float encoded3 = Random.Range(-1, 1);
float encodedSource = source;
encodedSource += encoded0 * _key0;
encodedSource += encoded1 * _key1;
encodedSource += encoded2 * _key2;
encodedSource += encoded3 * _key3
有了这个,你最终会得到encodedSource
浮点数、encoded0-3
浮点数和_key0-3
浮点数。然后只需这些值,您就可以对其进行解码以获得原始source
浮点数。
// Crude decoding
float source = encodedSource;
source -= encoded0 * _key0;
source -= encoded1 * _key1;
source -= encoded2 * _key2;
source -= encoded3 * _key3
所以这个算法的问题是,如果你只有encodedSource
浮点数和encoded0-3
浮点数,那么逆向工程得到浮点数是非常容易的key
。
是否有某种算法会使识别关键浮点数变得更加困难。
解决方案
除非您是专家,否则设计自己的密码学总是一个坏主意。所以最好利用已经存在的密码系统。
您想使用四个 32 位浮点数作为密钥。4 x 32 = 128 位,AES 需要一个 128 位(16 字节)的密钥。因此,请使用 AES 进行加密。
您想加密一个 32 位浮点数,即 4 个字节,或者可能是 8 个十六进制数字,纯文本。这是纯文本的缩写,所以我建议在计数器模式 (CTR)中使用 AES,这样你就不必进入填充之类的东西。您将需要一个唯一的随机数(使用一次的数字)与每个密钥以确保完全安全。
推荐阅读
- python - 我正在为不和谐的机器人编写代码,如果字符串不区分大小写,我希望这样,但我不知道如何
- mongodb - 在 Mongo 聚合中按变量分组
- ios - 如何在 ios 上仅使用没有家庭字体系统的自定义字体
- javascript - 无法更改 chart.js x 和 y 字体颜色
- python - fit_generator() 缺少 1 个必需的位置参数:“生成器”
- json - 如何使用 GORM 将包含转义码的 JSON 插入 PostgreSQL 中的 JSONB 列
- python - matplotlib.axes.Axes.set_ylabel 中的“fontsize”参数不起作用?
- javascript - 无法读取未定义的属性“标签”。来自 react.js 应用程序中的 domhandler
- regex - 如何删除除“01 - 10”模式之外的所有内容,反之亦然?
- python - 如何在没有循环的情况下通过列名和索引列表将值添加到数据框的列