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

标签 javascript encryption file-io

我正在使用 crypto-js 和以下代码来加密文件。它似乎对它们进行了加密,我可以在 alert() 中看到 string

我现在需要能够将加密文件保存在我计算机上的某个位置。我在我的计算机上本地运行此文件。

对于这种情况,我似乎找不到任何可行的解决方案!

这是我的完整代码:

<!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>

有人可以就此提出建议吗?

最佳答案

如果您不关心 IE9(或更早版本),您可以创建一个 Blob包含加密文本:

var blob = new Blob([encrypted], { type: 'text/plain' });

请注意,如果您没有纯文本,您仍然可以轻松地使用 Blob以容纳八位位组流。来自 MDN (另请参阅 MDN 上的 Blob ctor):

var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], {type: 'application/octet-binary'});

创建链接 <a>具有来自该 blob 的嵌入数据的元素:

var link = document.createElement('a');
link.download = 'Encrypted document';
link.href = URL.createObjectURL(blob);

将链接添加到您的文档并模拟用户点击然后将其删除:

document.body.appendChild(link);
link.click();
document.body.removeChild(link);

如果您必须支持 IE8,那么您必须手动Wikipedia有一些很好的例子,SO 上有一个标准 答案:Create a file in memory for user to download, not through server .

关于javascript - 在本地保存使用 JavaScript 生成的加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796107/

相关文章:

javascript - 如何过滤/搜索返回父级和子级的嵌套树

javascript Canvas 拉伸(stretch)我的图像

java - 在握手之前解密从 tls 上的 websocket 客户端接收的字节

php - PayPal证书升级&加密网站支付

iOS iPhone 寻求将带时间戳的整数快速记录到数据文件实现

c# - 为什么我收到 Documents and Settings 文件夹的访问被拒绝错误?

javascript - Meteor.user() 总是空的

javascript - 如何仅在未与元素交互时为其设置动画?

node.js - 客户端加密库

java - 如何在 Java 的目录中找到最后修改的文件?