我正在尝试为Android创建一个使用加密来保存用户信息的应用程序,我无法弄清楚我做错了什么。我正在尝试使用“PBKDF2WithHmacSHA1”算法创建SecretKeyFactory的实例,但应用程序继续在程序中的那一点抛出异常(无论是在模拟器中还是在真实硬件上都无关紧要)。 p>
代码:
SecretKeyFactory secretFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
例外:
java.security.NoSuchAlgorithmException: SecretKeyFactory PBKDF2WithHmacSHA1 没有找到实施......
这是奇怪的事情......如果我把这个代码编译成普通的Java应用程序,它可以运行......没有异常被抛出,我可以创建加密文件(并解密它们)而不会出错。
我还尝试输入其他算法(例如AES,PBEWithHmacSHA1AndDESede,PBEWithMD5AndDES等),它们都会在代码中的那一行产生相同的错误/异常(编译Android时)。
我安装了最新版本的Java(JDK 1.6.0.18),所有更新都应用于Eclipse和插件,以及最新版本的Android SDK。我也在运行Windows 7 64位。
请帮助,我在两天的互联网搜索中找不到答案。 感谢。
答案 0 :(得分:4)
它可能不是支持的算法或Android上的命名。
您是否浏览过javax.crypto类? https://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
以下是使用不同算法的示例,如果有帮助的话。 http://www.anddev.org/viewtopic.php?p=11737
顺便说一下,在此帖子中添加“from-irc”标签即可获得Google响应。 http://android-developers.blogspot.com/2010/01/irc-offce-hours-update.html
答案 1 :(得分:4)
这意味着android SDK没有此算法的实现。您有两种选择:
答案 2 :(得分:2)
是否有可在Android上使用的第三部分实现? Firefox Sync例如使用PBKDF2WithHmacSHA1,所以对我来说切换 另一种算法是没有选择的,因为那是我试图解密的。
答案 3 :(得分:0)
某些算法不适用于每个Android API。在SecretKeyFactory的官方文档中,您可以根据API来检查哪一个可用。
例如,PBKDF2withHmacSHA1
可从API 10+获得。