在本地保存使用JavaScript生成的加密文件
我使用crypto js和以下代码来加密文件。它似乎对它们进行了加密,我可以在在本地保存使用JavaScript生成的加密文件,javascript,encryption,file-io,Javascript,Encryption,File Io,我使用crypto js和以下代码来加密文件。它似乎对它们进行了加密,我可以在alert()中看到字符串 我现在需要能够保存加密文件在我的电脑上的某个地方。我在本地计算机上运行此文件 对于这种情况,我似乎找不到任何有效的解决方案 这是我的完整代码: <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /&g
alert()
中看到字符串
我现在需要能够保存加密文件在我的电脑上的某个地方。我在本地计算机上运行此文件
对于这种情况,我似乎找不到任何有效的解决方案
这是我的完整代码:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Get Directory</title>
<!-- Update your jQuery version??? -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!--
https://cdnjs.com/libraries/crypto-js
-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<!--[if lt IE 9]>
<script src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script> // type="text/javascript" is unnecessary in html5
// Short version of doing `$(document).ready(function(){`
// and safer naming conflicts with $
jQuery(function($) {
$('#file-input').on('change', function() {
// You can't use the same reader for all the files
// var reader = new FileReader
$.each(this.files, function(i, file) {
// Uses different reader for all files
var reader = new FileReader
reader.onload = function() {
// reader.result refer to dataUrl
// theFile is the blob... CryptoJS wants a string...
var encrypted = CryptoJS.AES.encrypt(reader.result, '12334');
ecr = encrypted.toString();
alert(encrypted);
}
reader.readAsDataURL(file)
$('#thelist').append('FILES: ' + file.name + '<br>')
})
})
});
</script>
</head>
<body>
<input type="file" id="file-input">
<div id="thelist"></div>
<input type="button" id="button" value="Save" />
</body>
</html>
获取目录
//type=“text/javascript”在html5中是不必要的
//doing`$(document).ready(function()的简短版本{`
//更安全的命名与$
jQuery(函数($){
$('#文件输入')。在('change',function()上{
//不能对所有文件使用同一个读卡器
//var reader=新文件读取器
$.each(this.files,function(i,file){
//对所有文件使用不同的读取器
var reader=新文件读取器
reader.onload=函数(){
//reader.result参考数据URL
//文件是blob…CryptoJS需要一个字符串。。。
var encrypted=CryptoJS.AES.encrypt(reader.result,'12334');
ecr=加密的.toString();
警报(加密);
}
reader.readAsDataURL(文件)
$(“#列表”).append('FILES:'+file.name+'
'))
})
})
});
有人能给你一些建议吗?如果你不关心IE9(或更早版本),你可以创建一个Blob
来包含加密文本:
var blob = new Blob([encrypted], { type: 'text/plain' });
请注意,如果没有纯文本,您仍然可以轻松地使用Blob
来容纳八位字节流。From(另请参见MDN上的):
创建链接有一些很好的例子,这里有一个标准答案:。我想你需要一个带有文件输入的HTML表单,因为安全原因,你不能直接从JS访问本地文件系统。@xander,我有文件输入。.我只是没有表单。你不能从客户端j将文件保存到本地文件系统avascript,即使您直接从文件系统打开html文件也不行(这不是一个好主意)。您可以生成一个链接,单击该链接后下载文件,或者您可以构建浏览器插件,甚至是独立的可执行文件(例如,使用Node Webkit)这将为您提供本地文件访问权限。密文不是文本文件。您将如何下载任意字节,以及如何将表示二进制数据的CryptoJS格式转换为您可能提出的解决方案?我从未使用密文,但根据OP示例,加密的
是纯文本这是真的,但这意味着Base64编码带来了33%的开销。此外,当您自己发现了一个完美的重复目标时,为什么要回答?同意,只是添加了一个关于这一点的注释。对于二进制数据,Blob
仍然非常有用(不确定密文BTW使用的格式)。回答是因为我认为添加代码示例可能有用,而不是仅添加最终结果。谢谢您的回答。此练习的目的是加密音频文件(即MP3播放器),然后通过某种音频播放器对其解密,以便播放。对此有何建议?
var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], {type: 'application/octet-binary'});
var link = document.createElement('a');
link.download = 'Encrypted document';
link.href = URL.createObjectURL(blob);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);