【问题标题】:Cannot use sjcl in Appcellerator Titanium project无法在 Appcellerator Titanium 项目中使用 sjcl
【发布时间】:2013-03-20 09:16:34
【问题描述】:

我正在尝试在我的 Titanium(目标:iOS 和 Android)项目中使用 sjcl(Stanford Javascript Crypto Library)加密一些文本。我正在使用最简单的方法,没有其他选择:

sjcl.encrypt("mypassword", "mytext");

应用程序只是挂在这条线上,我没有收到任何错误或任何有用的信息。我错过了什么?

谢谢!

【问题讨论】:

  • 您是否包含了 sjcl.js 并将所有文件 sjcl.zip 保存在一个文件夹中并包含在项目目录中
  • 是的,我做到了……在这张照片上你可以看到结构(还有一些不必要的部分留在了包装中):weibezahn.com/sjclscreen.png

标签: javascript encryption titanium-mobile sjcl


【解决方案1】:

代码可能运行良好。然而,第一个算法尝试使用 PBKDF2 函数从密码创建密钥。由于密码通常不包含足够的熵来安全地用于加密,因此此功能故意降低密码强度。如果(调试)框架需要大量时间来执行底层哈希函数,那么您的应用程序可能会出现挂起(检查您的 CPU 使用情况)。

解决方案是要么降低 PBKDF2 作为输入的迭代次数,要么使用 Java PBKDF2。两者都可能需要对 SJCL 的较低级别访问。最后,在 Java 平台上选择一个用于加密的 JavaScript 库会极大地降低性能。为此,您可能需要考虑删除 SJCL。

【讨论】:

  • 我尝试减少迭代次数,但无济于事。有趣的是,如果我在他们的演示页面bitwiseshiftleft.github.com/sjcl/demo(“加强”字段)上将迭代次数设置为 10,例如,脚本会失败。我还尝试使用直接的十六进制密钥,这样它就不必由 sjcl 计算但没有成功……我需要的基本上是一些非常浅的加密(混淆就足够了),因为数据不太可能被访问任何不了解它的人,也没有太多价值。你能为此推荐一些javascript中的东西吗?谢谢!
  • 我不会认为 SJCL 是一个完善的加密库。一旦我开始使用它,很快就发现 CCM 模式认证加密的 AAD 数据根本没有放入计算中(便利库中的失败)。不幸的是,我没有使用太多 JavaScript 加密 API,主要是因为我认为浏览器不应该执行任何类型的加密相关任务(尽管在受信任的应用程序中应该没问题)。如前所述,为每个平台创建本机功能并从 JavaScript 中使用它会更有意义。
  • 我怀疑性能是一个问题,我在纯浏览器实现中使用这个确切的代码得到了亚秒级的响应时间。 sjcl 库是目前最受推崇的加密库之一 -> matasano.com/articles/javascript-cryptography 了解更多信息
  • @JamesWestgate 速度在很大程度上取决于底层实现。对于大多数高端桌面浏览器来说,这应该没问题——它们的性能都比以前好得多——但它可能仍然是一个问题,例如嵌入式浏览器。
  • 这是一个有效的点。我想目前尚不清楚 OP 是否在开发环境或设备上存在此问题。我正在这方面做一些工作,当我知道更多时我会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多