Javascript SJCL加密结果文件大小错误
我已在我的一个应用程序中成功实施了iOS。我现在希望能够用我的JavaScript实现对该应用程序中的文件进行加密和解密。我使用FileReader从用户那里获取一个本地文件,并用Javascript SJCL加密结果文件大小错误,javascript,encryption,filereader,rncryptor,sjcl,Javascript,Encryption,Filereader,Rncryptor,Sjcl,我已在我的一个应用程序中成功实施了iOS。我现在希望能够用我的JavaScript实现对该应用程序中的文件进行加密和解密。我使用FileReader从用户那里获取一个本地文件,并用 reader.readAsArrayBuffer(file); 完成此操作后,将使用对文件进行加密,最后可以下载加密文件: reader.onloadend = function(e) { var content = new Uint8Array(e.target.result); var utf
reader.readAsArrayBuffer(file);
完成此操作后,将使用对文件进行加密,最后可以下载加密文件:
reader.onloadend = function(e) {
var content = new Uint8Array(e.target.result);
var utf8 = "";
for (var i = 0, len = content.length; i < len; i++) {
utf8 += String.fromCharCode(content[i]);
}
var b64 = btoa(utf8);
//we finally encrypt it
var encrypted = sjcl.encrypt(password, b64,{ks:256});
var json = JSON.parse(encrypted);
var ciphertext = json.ct;
a.attr('href', 'data:application/octet-stream,' + ciphertext);
a.attr('download', file.name + '.encrypted');
step(4);
};
reader.readAsArrayBuffer(file);
reader.onloadend=函数(e){
var内容=新的Uint8Array(即target.result);
var utf8=“”;
for(变量i=0,len=content.length;i
问题是加密文件比原始文件大得多。在我的iOS实现中,情况并非如此,它工作得很好。当然,它不能被无误地解密。事实上,结果文件的大小将为0字节
我希望有人能指出我代码中的错误。那太好了
@邓肯:
多谢各位。我对此进行了调查,但我并不确定我必须采取的所有步骤。尤其是它们在代码中的含义。也许有人能帮我。非常感谢
加密
根据sjcl的说法,这是一个错误的假设,它使用ccm作为默认模式。RNCryptor使用a作为其输入和输出。在尝试与一些JavaScript代码集成时,您需要考虑到这一点。我已经开始研究RNCryptor格式的JavaScript实现(准备好后将显示)。JavaScript速度太慢,无法处理默认的RNCryptor设置。你必须减少PBKDF2的迭代次数,否则加密或解密数据需要几分钟的时间,甚至在桌面浏览器上也是如此(想到在移动设备上计算需要多少时间,我不寒而栗)。听到这个消息真是太好了。先谢谢你。那真是太酷了。我自己也在想这个。也许可以使用?@freshking,我不确定你的意思,你可以在cbc模式下使用sjcl,这不是默认模式。使用:sjcl.encrypt(密码,b64,{ks:256,mode:'ccm'}),但请注意配置中可能存在其他差异,因此请检查我提供的链接。我刚刚在SCJL中阅读了CBC模式,它似乎不起作用:你是对的,它完全不在sjcl中,我的错。也许你可以试试cryptojs,但我不熟悉。SJCL支持EBC模式吗?