【发布时间】:2017-11-15 03:55:57
【问题描述】:
我想使用 AES 加密和解密 SD 卡中的文件。为了做到这一点,我们总是需要一个seed(通常是用户作为密码插入的字符串):
public static byte[] generateKey(String password) throws Exception{
byte[] keyStart = password.getBytes("UTF-8");
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
sr.setSeed(keyStart);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
return skey.getEncoded();
}
我想跳过这一步(用户输入密码),只要求用户通过指纹传感器进行身份验证,然后开始加密过程!
我想知道是否有一种方法可以为每个触摸指纹传感器的不同手指获取一个唯一密钥,可以用作 SEED 来创建SecretKey!?
我在github 上阅读了一些关于 SO 和相关示例的问题,但我仍然找不到解决方法。
解决问题:我已经完成了 AES 本身的实现并且完全没问题,我只需要找到一种方法来在身份验证后从指纹传感器获取唯一密钥。
【问题讨论】:
-
指纹不能像密码一样直接用作密钥,因为指纹在读取时略有不同。更糟糕的是,指纹并不是秘密——你把它们留在各处。
-
@JamesKPolk:我对指纹传感器如何检测设备所有者的假设是指纹传感器根据触摸指纹传感器的每个手指生成一个哈希键。然后指纹传感器将生成的哈希密钥与从所有者的指纹生成的哈希密钥进行比较,该指纹在某处保密(当所有者即将在设备上激活此身份验证时)。如果存在这样的东西,我需要找到它并将其用作密码(因为我们不知道指纹传感器如何生成哈希键,这可能是一个可靠的密码)
-
@JalalAghazadeh 与您的问题无关,但您不应在任何代码中使用
SHA1PRNG。已弃用 -
@JalalAghazadeh 你成功了吗?我正在寻找完全相同的东西,但找不到答案...
-
@ben 不是真的 :( 因为正如“James K Polk”所提到的指纹并不是秘密,你把它留在了任何地方,并且没有全局 API 可以从指纹芯片和每个公司有他自己的故事。有些允许您通过一些自定义 api 访问此类密钥,有些则不允许!
标签: android encryption fingerprint secret-key android-fingerprint-api