使用带有JavaScript的encfs

时间:2012-06-06 06:57:00

标签: javascript encryption

我正在尝试使用JavaScript从encfs文件系统中读取但是没有正确使用它。我使用CryptoJS库。

.ecnfs6.xml,标准设置和密码为123456:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="9">
<cfg class_id="0" tracking_level="0" version="20">
  <version>20100713</version>
  <creator>EncFS 1.7.4</creator>
  <cipherAlg class_id="1" tracking_level="0" version="0">
    <name>ssl/aes</name>
    <major>3</major>
    <minor>0</minor>
  </cipherAlg>
  <nameAlg>
    <name>nameio/block</name>
    <major>3</major>
    <minor>0</minor>
  </nameAlg>
  <keySize>192</keySize>
  <blockSize>1024</blockSize>
  <uniqueIV>1</uniqueIV>
  <chainedNameIV>1</chainedNameIV>
  <externalIVChaining>0</externalIVChaining>
  <blockMACBytes>0</blockMACBytes>
  <blockMACRandBytes>0</blockMACRandBytes>
  <allowHoles>1</allowHoles>
  <encodedKeySize>44</encodedKeySize>
  <encodedKeyData>
A2MxizkB27kOot67DqX/ftXoAiO0P8ORF4BqbKnbMeHuIusJl5y36Qy8o8w=
  </encodedKeyData>
  <saltLen>20</saltLen>
  <saltData>
z59o4aHs2QaKGdoEMEigtqSkXyw=
  </saltData>
  <kdfIterations>97742</kdfIterations>
  <desiredKDFDuration>500</desiredKDFDuration>
</cfg>
</boost_serialization>

我创建了一个名称和内容为“test”的文件,并尝试解密但没有成功:

var data = "Q75cZB2ok,JdXDqvWh8HbwHI";  // filename
var key = "123456";
var salt = "z59o4aHs2QaKGdoEMEigtqSkXyw=";

data = CryptoJS.enc.Base64.parse(data);
salt = CryptoJS.enc.Base64.parse(salt);

var cipher = CryptoJS.AES.decrypt(data, key, {keySize: 192/32});

2 个答案:

答案 0 :(得分:4)

EncFS的工作方式是创建一个卷密钥(根据您的配置为192位),并使用从用户密码派生的另一个密钥加密卷密钥(用于导出密码密钥的算法称为PBKDF2 - 基于密码的密钥派生函数)。

鉴于配置文件,您需要做的是:

  • 获取用户密码,输入PBKDF2计算以及盐和迭代计数(均存在于配置文件中)以获取密码密钥。
  • 使用密码密钥,从配置的encodedKeyData字段解密卷密钥(AES流解密)

获得音量键后,您可以使用它来解密文件名和文件内容。

有关如何完成此操作的示例,您可以查看我在Java中编写的以下库: https://github.com/mrpdaemon/encfs-java

答案 1 :(得分:2)

目前的JavaScript实现太慢而无法生成 PBKDF2超过1000 - 2000(没有显着延迟) 10000(显着延迟)迭代。迭代计数就像你的 示例97742需要数小时才能完成......

更新:仅在使用CryptoJS时才显示:see JSPerfJSFiddle用于PBKDF2。