Facebook 将它的 Conceal 转为开源项目。Conceal 是一套用于 Android 上的文件加密和鉴权的 Java API,它使用 OpenSSL 算法的子集以及一些预先定义的选项,以便让库保持在较小的体积——目前仅有 85KB 大小。
对于比较古老的 Android 设备——从 Froyo 到 Jelly Bean——据 Facebook 表示,该库在这些设备上的性能要优于 Android 提供的原生支持。
上图中的基准测试,展示了在 Galaxy Y 终端上,对原生 Android 算法(ES-CTR-HMAC-SHA1)、Bouncycastle((AES-GCM)和 Concea 进行对比的结果 l。
Google 在 KitKat 中引入了对 OpenSSL 的支持,但是其中使用的默认密码流则“表现差强人意”——在Facebook 看来,“当使用我们的密码流(参阅 BetterCipherInputStream.java 文件)来替换它时,将使得默认实现能够与 Conceal 相媲美。”
以下代码片段展现了如何使用 Conceal 对文件进行加密:
// 使用秘钥链和原生库的默认实现,来创建一个新的加密对象 Crypto crypto = new Crypto( new SharedPrefsBackedKeyChain(context), new SystemNativeCryptoLibrary()); // 检查加密功能是否可用 // 如果 Android 没有正确载入库,则此步骤可能失败 if (!crypto.isAvailable()) { return; } OutputStream fileStream = new BufferedOutputStream( new FileOutputStream(file)); // 创建输出流,当数据写入流的时候进行加密,并将加密后的数据输出到文件 OutputStream outputStream = crypto.getCipherOutputStream( fileStream, entity); // 将纯文本写入其中 outputStream.write(plainText); outputStream.close();
Conceal 可以用来加密大型文件,Facebook 用它来加密手机 / 平板电脑 SD 卡中的数据和图片。
在 Conceal 的 GitHub 页面上,还提供了基于 OpenSSL 构建相似库的指南。
评论