Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本地保存使用JavaScript生成的加密文件_Javascript_Encryption_File Io - Fatal编程技术网

在本地保存使用JavaScript生成的加密文件

在本地保存使用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

我使用crypto js和以下代码来加密文件。它似乎对它们进行了加密,我可以在
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);