【发布时间】:2014-06-17 10:54:10
【问题描述】:
我为安卓开发了一个加密程序,它使用对称密钥来加密和解密数据(AES 算法)。 因此,我被要求验证不仅逆向工程工作正常,而且只有一个密钥可用于解密数据。我发现的一项测试称为 The已知答案测试。因此使用提供的加密密钥和测试向量可以比较结果。
AES 测试向量: http://www.inconteam.com/software-development/41-encryption/55-aes-test-vectors
但是,问题在于提供的密钥和提供的数据是 HEX 格式。
所以首先我使用提供的密钥并从中创建了一个不起作用的字符串:
byte[] convertedKeyToByte = providedKey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(convertedKeyToByte , 0, convertedKeyToByte .length,
AESalgorithm);
之后,我使用特殊方法将字符串转换为十六进制,由于十六进制转换为十六进制,该方法也不起作用。一般来说,第一种方法应该有效,但它没有。
如果我完全错了,请不要对我大喊大叫,因为我之前没有做过加密。
如何证明 AES 算法有效,以及只有一个密钥可以用于加密和解密数据?
【问题讨论】:
-
您的问题到底是什么?将十六进制数据转换为键和字节?
-
你所说的“逆向工程”是什么意思?您是否重新实现了 AES?如果您使用的是 Android 提供的“普通”AES 实现,则没有理由在 您的 代码上对其进行测试。
-
逆向工程意味着可以解密加密数据。这是自动证明的。所以我被要求证明 AES alogirthm 是有效的,因此只有一个密钥可以用于加密和解密数据。这是我的要求中写的。
-
“怎么可能证明AES算法有效”很简单,加密解密,实际与预期比较。
-
“只有一个密钥可以用来加密和解密数据”这可能需要数学证明。
标签: java android unit-testing encryption