我正在尝试几天做下面的事情:
我的硬盘/服务器文件是用ENCFS(aes256)加密的。我想要做的是使用JavaScript库在我的浏览器(客户端)解密它们。 现在,我找到了两个js库:
CryptoJS:我放弃了这个,因为解密真的很长;
SJCL:这个非常好,经过一些加密/解密工作,看起来这个比CryptoJS快100倍。
所以,好的。几天后我正在尝试使用SJCL ...我对使用库加密和解密文件有很好的结果,但我对使用encfs加密的文件进行解密时遇到了一些麻烦。
我正在按此顺序执行步骤:
iv : chainedNameIV
v : 1 (default value)
iter : kdfIterations
ks : keySize
ts : blockSize
mode : 'ccm'
adata : '' (empty value...)
cipher : aes
salt : saltData
ct : ct is the content of the file i want to decrypt.
我认为我在为我的链设置的元素的“选择”中存在问题......这是我使用js代码进行的操作。
可以从xml文件获取信息并解密文件的函数文件。
var decrypt = {
getMetaInfos: function(file) {
var ks = file.getElementsByTagName('keySize');
var iv = file.getElementsByTagName('chainedNameIV');
var salt = file.getElementsByTagName('saltData');
var iter = file.getElementsByTagName('kdfIterations');
var ts = file.getElementsByTagName('blockSize');
var infos = {};
infos.iv = iv[0].childNodes[0].nodeValue;
infos.v = 1;
infos.iter = iter[0].childNodes[0].nodeValue;
infos.ks = ks[0].childNodes[0].nodeValue;
infos.ts = ts[0].childNodes[0].nodeValue;
infos.mode = 'ccm';
infos.adata = '';
infos.cipher = 'aes';
infos.salt = salt[0].childNodes[0].nodeValue;
infos.ct = '';
return infos;
},
getFileContent: function(file) {
request = new XMLHttpRequest();
request.open('POST', 'ajax.php', false);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send('t=getFile&file='+file);
if (request.status >= 200 && request.status < 400){
return request.responseText;
}
},
decryptFile: function(fileContent, metaInfos, passphrase) {
metaInfos.ct = fileContent;
console.log(metaInfos);
console.log(sjcl.decrypt(passphrase, metaInfos));
},
createFile: function(file) {
return;
}
}
如果查看decryptFile
函数,则有两个{{1}}。第一个是显示我的对象的所有元信息和我要解密的文件的内容,第二个是显示js错误的文件:
console.log
这是我的控制器文件:
Uncaught TypeError: undefined is not a function
我正在使用AJAX和PHP脚本来获取文件的内容(window.onload = function() {
// Declare some vars
var xmlFile = 'files/coffre/ecfs6.xml';
var passPhrase = 'passphrase';
var request = new XMLHttpRequest();
// Ajax request
request.onload = function() {
xmlData = new DOMParser().parseFromString(request.responseText, 'text/xml');
// Get meta informations which'll help to decrypt files in folder (encfs config)
xmlData = decrypt.getMetaInfos(xmlData);
// Add eventlistener on link click to do all the stuff we need
var links = document.getElementsByTagName('a');
for (var _i = 0; _i < links.length; _i++) {
links[_i].onclick = function linkClicked() {
var fileUrl = this.href;
var fileContent = decrypt.getFileContent(fileUrl);
var decryptedFile = decrypt.decryptFile(fileContent, xmlData, passPhrase);
return false;
};
}
}
// Sending request
request.open('GET', xmlFile, false);
request.send();
}
),然后我将数据编码为file_get_contents
,然后将它们返回到我的js脚本。我存储的所有数据似乎都没问题。
要完成,这是我使用utf8_encode
加密文件夹时生成的xml文件(在Ubuntu 14.04 VM上运行)。
encfs
接下来我的问题是:我是否收到商品xml字段?我错过了什么吗?我希望有一个人可以帮助我。不要害怕向我提出更多问题,我很乐意回答他们。