多轮AES加密永远在Android上运行

时间:2015-06-25 22:23:09

标签: java android encryption

我正在尝试为Android实现自己的KeePass应用,主要用于学习目的。我从http://blog.sharedmemory.fr/en/2014/04/30/keepass-file-format-explained/

找到了
  

要生成最终的主密钥,首先需要生成转换后的密钥:

     

创建一个AES密码,将Transform Seed作为其密钥/种子,

     

使用复合键值(transformed_key = composite_key)

初始化转换后的键值      

使用此密码对transformed_key进行N次加密(transformed_key = AES(transformed_key),N次),

     

hash(使用SHA-256)transformed_key(transformed_key = sha256(transformed_key)),

     

将Master Seed连接到transformed_key(transformed_key = concat(Master Seed,transformed_key)),

     

hash(使用SHA-256)transformed_key获取最终的主密钥(final_master_key = sha256(transformed_key))。

我有第2步:

Cipher c = Cipher.getInstance("AES/ECB/NoPadding");
Key aesKey = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, aesKey);
for (long i = 0; i < rounds; ++i) {
     data = c.doFinal(data);
}

然而,它真的非常慢。我知道必须有一个更快的方法,因为Android上的其他KeePass应用程序在解密数据库时运行速度不是很慢。当我看到Android设备监视器时,它正在反复运行doFinal部分,这是有道理的,但必须有一个更快的方法。

0 个答案:

没有答案