这是一个很难描述的问题,我对密码学很天真。所以,请原谅我在试图解释这一点时磕磕碰碰。
我有一个32位的浮点值;源";浮动然后我有四个32位浮点值;键";浮动。
我想以某种方式编码或混淆";源";用四个";键";浮动。得到的";编码源";则float将被存储为4〃;编码的";浮动。那么,如果你有这四个";编码的";浮动,四个";键";浮子和";encodedSource";浮动,然后你可以得到原来的";源";浮动
这里有一个粗略的例子:
// 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,这样你就不必处理填充之类的事情。您需要每个密钥都有一个唯一的nonce(n使用一次的编号(,以确保完全安全。