如何使用种子值生成AES密钥,以便每当我生成具有相同种子值的密钥时,我都能获得相同的AES密钥?
我想为Blackberry Pearl 8100设备生成此密钥。
我无法使用AESKey(keyData)生成AES密钥。
每当我以String或byte []的形式打印它时,我都无法生成它。(打印它)实际的键永远不会被打印。
获取密钥可以做些什么?
更新
我尝试通过传递我的数据的byte []来生成AESKey,如下所示:
AESKey key = new AESKey(keyData);
每次我得到相同的密钥,这是正确的。
现在使用这个密钥我正在加密数据。每次我加密我得到不同的加密值。这是我的问题。如何在加密后每次都获得相同的数据,以便我可以将其发送到服务器?
更新
我无法使用AESKey(keyData)生成AES密钥。
每当我以String或byte []的形式打印它时,我都无法生成它。(打印它)实际的键永远不会被打印。
获取密钥可以做些什么?
答案 0 :(得分:7)
RFC 2898中的第5.2节描述了这样做的一种方式。
具体而言,“种子”值由“PASSPHRASE”和“SALT”组成;但是如果使用相同的密码和盐,将始终产生相同的密钥。
http://anandam.name/pbkdf2/是一个javascript实现。
http://en.wikipedia.org/wiki/PBKDF2包含更多信息,以及指向其他实施的链接。
答案 1 :(得分:0)
此无法以安全的方式完成。你不应该生成这样的加密密钥,特别是如果你打算用结果密钥保护任何重要的东西。尽管如此,这样做的基本算法看起来像这样(许多增强都是可能的,但没有一个能使它真正安全):
N
个字节;那些是你的加密密钥。只要您在步骤2中使用相同的值播种,生成的第一个N
字节将始终相同。None
种子;这会告诉机器选择任何随机种子。)答案 2 :(得分:0)
我需要更多信息,所以这是猜测。
你是如何使用AESKey的?如果您正在使用CBC加密(即使用net.rim.device.api.crypto.CBCEncryptorEngine),那么每个调用的初始化向量也必须相同。使用CBCEncryptorEngine的构造函数,它接受InitializationVector和BlockEncryptorEngine。
Wikipedia article了解更多信息,了解其原因。