首页 > 解决方案 > 如何下载加密的base64?然后解密

问题描述

我想在客户端浏览器中对图像进行加密和解密。

我已经创建了一个加密 base64 的上传图像。但是,我不知道如何下载这个加密图像(格式图像不是文本)。

之后我想上传这个加密的图像进行解密。

感谢您的提前,我很抱歉我的英语不好。

$(document).ready(function() {
        $("#form-encrypt").on('submit', function(e){
            e.preventDefault();
            disabledButton('btn-submit-encrypt');
            let filesSelected = document.getElementById("inputFileToLoad").files;
            let fileExtension = filesSelected[0].name.split('.').pop()
            const password = $('#password').val();
            if (filesSelected.length > 0) {
                let fileToLoad = filesSelected[0];
                let fileReader = new FileReader();
                fileReader.onload = function(fileLoadedEvent) {
                    let base64value = fileLoadedEvent.target.result;
                    let encrypt = CryptoJS.AES.encrypt(base64value, password).toString();
            
                };
                fileReader.readAsDataURL(fileToLoad);
            }

        });


        $("#form-decrypt").on('submit', function(e){
            e.preventDefault();

            const ciphertext = document.querySelector('#encrypt-text').value;
            const pass = document.querySelector('#password-decrypt').value;
            try {
                let bytes  = CryptoJS.AES.decrypt(ciphertext, pass);  
                const originalText = bytes.toString(CryptoJS.enc.Utf8);
                
                const preview = document.getElementById('preview');
                preview.setAttribute('src', originalText);
                $("#preview").show();
                
            } catch (error) {
                alert('Wrong Password, or Encrypt Text Not Right');
                
            }

        });
    });


    function downloadTxt(filename, data, mimeType) {
        let element = document.createElement('a');
        element.setAttribute('download', filename);
        mimeType = mimeType || 'text/plain';
        element.setAttribute('href', 'data:' + mimeType  +  ';charset=utf-8,' + [enter image description here][1]encodeURIComponent(data));
        element.click(); 
    }

    function disabledButton(elm) {
        const element = document.getElementById(elm);
        element.setAttribute('disabled', true);
        element.innerHTML = 'Loading..';
    }

标签: javascriptencryptioncryptographybase64cryptojs

解决方案


是的,我已经知道了。

我错了,因为我在 fileReader 中加密了所有结果,你必须拆分一个 base64 值。

例子 :

数据:图像/png;base64,iVBOblablabla

用 ( , ) 分割,你得到数组 data[0] = data:image/png;base64 data[1] = iVBOblablabla

你应该只加密数据[1]


推荐阅读