首页 > 解决方案 > 如何用 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

是否有某种算法会使识别关键浮点数变得更加困难。

标签: securityencryptionhashcryptographysha

解决方案


除非您是专家,否则设计自己的密码学总是一个坏主意。所以最好利用已经存在的密码系统。

您想使用四个 32 位浮点数作为密钥。4 x 32 = 128 位,AES 需要一个 128 位(16 字节)的密钥。因此,请使用 AES 进行加密。

您想加密一个 32 位浮点数,即 4 个字节,或者可能是 8 个十六进制数字,纯文本。这是纯文本的缩写,所以我建议在计数器模式 (CTR)中使用 AES,这样你就不必进入填充之类的东西。您将需要一个唯一的随机数(使用一次数字)与每个密钥以确保完全安全。


推荐阅读