我们的前端一直遵循一种在Web加密API的帮助下生成对称密钥的方法:
const tempKey = await crypto.subtle.deriveKey(
{
name: 'PBKDF2', salt: salt,
iterations: 100000, hash: 'SHA-256'
},
importedPassword,
{name: 'AES-GCM', length: 256},
true,
['encrypt']
);
我试图从中解释第一个参数,即生成PBKDF2:
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec keySpec = new PBEKeySpec(passphraseOrPin).toCharArray(), salt.getBytes(), iterations, outputKeyLength);
SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
然后我完全不明白第三个参数,它尝试在生成的SecretKey
上运行长度为256的AES算法。如何在安卓中做到这一点?为什么它是必要的或有益的??
我不知道那个 API,但猜测它用于确定从 KDF 输出的适当位数。 它实际上并没有在这里运行/使用 AES
此参数的文档说:
derivedKeyAlgorithm
是一个对象,用于定义派生密钥将用于的算法。
这似乎是一致的