我正在尝试使用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});
答案 0 :(得分:4)
EncFS的工作方式是创建一个卷密钥(根据您的配置为192位),并使用从用户密码派生的另一个密钥加密卷密钥(用于导出密码密钥的算法称为PBKDF2 - 基于密码的密钥派生函数)。
鉴于配置文件,您需要做的是:
获得音量键后,您可以使用它来解密文件名和文件内容。
有关如何完成此操作的示例,您可以查看我在Java中编写的以下库: https://github.com/mrpdaemon/encfs-java
答案 1 :(得分:2)
目前的JavaScript实现太慢而无法生成
PBKDF2超过1000 - 2000
(没有显着延迟)
10000
(显着延迟)迭代。迭代计数就像你的
示例97742
需要数小时才能完成......
更新:仅在使用CryptoJS时才显示:see JSPerf和JSFiddle用于PBKDF2。