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

  • Abel Avram
  • 李彬

2014 年 1 月 29 日

话题:Java开源安全FacebookAndroid语言 & 开发

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

Java开源安全FacebookAndroid语言 & 开发