JavaScript之 文件分段MD5加密、大文件秒加密校驗

js之文件分段加密、大文件秒加密

<html>
<head>
    <meta charset="utf-8">


    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
    上傳文件 : <input type="file" name="file" id="fileId"/>
    <button type="submit" name="btn" value="提交" id="btnId" onclick="check('fileId')"/>
</div>
<!--設置成本身的md5-->
<script src="https://blog-static.cnblogs.com/files/tyler-bog/md5_encrypt.js"></script>
<script>
    // 生成MD5的函數
    function md5s(str) {
        var MD5 = new Hashes.MD5().hex(str)
        return MD5
    }
    // Button按鈕點擊調用此函數。fileId爲上傳文件input的id值
    function check(fileId, split_num = 32, get_byte = 64) {
        var info = new String;
        var sum=0;
        /*fileId:input上傳文件的id
        split_num: 須要分割生成MD5的數量,默認32
        get_byte: 每段須要取的字節個數,默認64字節
        小於2MB的文件直接MD5*/

        // 判斷 split_num和get_byte 是否爲數字
        // 定義文件對象
        var objFile = document.getElementById(fileId);
        // 判斷文件書否爲空
        if (objFile.value == "") {
            alert("文件不能爲空空");
            return false;
        }

        var blob = objFile.files[0];
        // 定義常量 const ,不可修改
        // 獲取文件的總大小
        const size = blob.size;
        // 計算每段的大小
        const mean_size = Math.floor(size / split_num);
        // 判斷文件大小,若是小於 split_num * get_byte 就直接MD5
        if (size < split_num * get_byte) {


             res_md5 = md5s(blob(0,blob.size()));         // 獲得md5值
            console.log(res_md5);
            return res_md5
            }

        } else {
            var start = 0;  // 定義開始位置
        var end = get_byte; // 定義截取結束位置

        while (start < size) {
            var read = new FileReader();              //建立讀取器對象FileReader
            blobs = blob.slice(start, end); //建立Blob對象
            read.readAsText(blobs);                  //開始讀取文件
            start = start + mean_size;              // 下一段開始位置
            end = start + get_byte;                 // 定義截取結束位
            info += blobs;
            res_md5 = md5s(info);
            console.log(res_md5);
            return res_md5

            }


        }
    }


</script>
</body>
</html>
相關文章
相關標籤/搜索