2010-08-25 63 views
5

我已经看过示例here。一切顺利,我很了解它,但它依赖于供应商的bounceycastle库。如果我可以提供帮助,我不想将任何其他第三方库与我的应用捆绑在一起。我不需要堡垒诺克斯风格的安全性,只是一些基本的对称加密通过电线传输。如何在Android上使用第三方库进行基本加密?Android上的基本加密

感谢

回答

5

BouncyCastle包含在Android中,你可以看到如果你试图包含它,你会得到:D/dalvikvm(9268): DexOpt: not verifying 'Lorg/bouncycastle/x509/extension/SubjectKeyIdentifierStructure;': multiple definitions等等。

然而,并不是所有的算法都实现 - 你会得到一个NoSuchAlgorithmException。 在Android 2.2的我认为这是一个实现:

PBEWITHSHAAND128BITAES-CBC-BC PBEWITHSHAAND3-KEYTRIPLEDES-CBC 1.2.840.113549.1.1.7 PBEWITHSHA256AND256BITAES-CBC-BC PBEWITHSHAAND192BITAES-CBC-BC DESEDE DES 1.2.840.113549.3.7 PBEWITHSHAAND2-KEYTRIPLEDES-CBC 1.3.14.3.2.7 PBEWITHSHA256AND192BITAES-CBC-BC PBEWITHSHAAND256BITAES-CBC-BC PBEWITHSHAAND40BITRC2-CBC AES 2.16.840.1.101.3.4.1.42 PBEWITHSHA256AND128BITAES-CBC-BC 2.16.840.1.101.3.4.1.22 2.16.840.1.101.3.4.1.2

+1

加密时(使用链接的例子),我在调用doFinal时遇到了shortbufferexception - 有什么想法? – MalcomTucker 2010-08-25 12:28:58

+0

那么,这个例子在我的Nexus one 2.2上运行良好。 你不应该得到一个shortbufferexception,但你总是可以尝试设置: byte [] cipherText = new byte [2048]; 如果加密工作,尽管你会得到一些垃圾在打印输出。 – 2010-08-25 12:57:19

+1

我的cipherText比那大得多 - 大约3800字节。 byte []。length是否需要是16的倍数? – MalcomTucker 2010-08-25 15:15:57

5

我不想捆绑与我的应用程序的任何其他第三方库,如果我能帮助它。

您不需要第三方库就可以使用javax.crypto。有在线样本使用javax.crypto,如thisthis。如果你需要一个Base64编码器,Android 2.2中有一个编码器,或者也有开源的实现。

+0

你知道哪个加密算法的Android BC支持?我知道这是一个卑诗省的残缺版本,但无法找到它实际支持的内容。 – 2011-09-28 02:46:51

+0

@metalideath:关闭我的头顶,没有。此外,有人将BC重新打包为org.spongycastle,以便通过“残缺版本”的东西,以防你需要的东西不能通过'javax.crypto'包得到。 – CommonsWare 2011-09-28 11:14:26