2012-06-06 47 views
2

我想用JavaScript从一个encfs文件系统中读取,但是没有正确使用它。我使用CryptoJS库。与JavaScript一起使用encfs

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

<?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> 

我创建了一个文件,名称和内容的“测试”,并试图解密机智没有成功:

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}); 

回答

4

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

由于配置文件,你必须做的是:

  • 以用户的密码,输入与盐和迭代次数(均出现在配置文件中)取回一起进入PBKDF2计算的密码键。
  • 使用密码钥匙,从配置

的encodedKeyData领域解密音量键(AES流解码),一旦你有,你可以用它来解密文件名以及文件内容的音量键。

对于如何做到这一点的例子,你可以看看下面的图书馆,我在Java中写道: https://github.com/mrpdaemon/encfs-java

2

当前的JavaScript实现是生成一个 PBKDF2超过1000 - 2000过于缓慢(没有明显延迟)至 10000(明显延迟)迭代。迭代计数就像你 例如97742将采取小时才能完成...

更新:使用CryptoJS只有当明显:see JSPerfJSFiddle为PBKDF2。

相关问题