在 Android 上使用 Facebook Concel 对文件加密

  • 2014-01-28
  • 本文字数:747 字

    阅读完需:约 2 分钟

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 构建相似库的指南

查看英文原文: Encrypting Files on Android with Facebook Conceal