账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    crypto-js解密图片
    • 2020-01-01 00:00
    • 11
    48
    0

    我在electron-vue中有个加密并解密图片的逻辑,逻辑是这样:读取从服务器下载到本地的一个加密后的图片,然后使用crypto-js的AES进行解密。目前一直解密不成功,我在本地写了个demo,前端自己加密后的图片也解密不成功,但如果只是将加密后形成的字符串保存在内存中,然后对其解密,却可以解密成功。
    求解密图片哪里出问题了?

    代码如下:

    async encrypt() {
        const eKey = '123';
        const filedir = '/Users/test/Documents/data/old.jpg';
        const c = fs.readFileSync(filedir);
        const data = new Buffer(c).toString('base64');
        let encrypted = CryptoJS.AES.encrypt(data, eKey).toString();
        this.mydata = encrypted;
        fs.writeFile('hao.jpg', encrypted, function (err) {
            if (err) {
                console.log(err);
            }
            else {
                console.log('保存成功!');
            }
        });
    },
    decrypt() {
        const eKey = '123';
        // 读取加密后的图片
        const filedir = '/Users/test/Documents/data/hao.jpg';
        const c = fs.readFileSync(filedir);
        const data = new Buffer(c).toString('base64');
    
        // let base64 = CryptoJS.AES.decrypt(this.mydata, eKey).toString(CryptoJS.enc.Utf8);
        // let base64 = CryptoJS.AES.decrypt(data, eKey).toString(CryptoJS.enc.Utf8);
        let decrypted = CryptoJS.AES.decrypt(data, eKey);
        let base64 = new Buffer(decrypted.words).toString('base64');
        
        let img = new Image();
        img.src = 'data:image/jpeg;base64,' + base64;
        img.style.height = '600px';
        img.style.width = '600px';
        document.body.append(img);
    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 孟木嗲嗲 普通会员 1楼

      Crypto-JS 是一种基于区块链的加密货币,用于实现加密货币的安全性和隐私保护。它是一种基于加密算法的货币,可以用来存储和转移数字货币。下面是一个简单的示例,展示如何使用 Crypto-JS 解密图片:

      ```javascript // 创建一个 Web workers 以处理加密任务 const crypto = require('crypto-js');

      // 创建一个加密函数,用于解密图片 function decryptImage(input, key) { // 创建一个加密的图像 const encryptedImage = crypto.subtle.encrypt( { name: 'AES-GCM', iv: 'your_iv', mode: 'EC' }, input, key );

      // 创建一个解密的图像
      const decryptedImage = crypto.subtle.decrypt(
          {
              name: 'AES-GCM',
              iv: 'your_iv',
              mode: 'EC'
          },
          encryptedImage, key
      );
      
      // 返回解密后的图像
      return decryptedImage;
      

      }

      // 获取一个加密的图像 const input = crypto.subtle.encrypt( { name: 'AES-GCM', iv: 'your_iv', mode: 'EC' }, 'your_image' );

      // 获取一个解密的图像 const decryptedImage = decryptImage(input, 'your_key');

      // 将解密后的图像保存到本地文件 decryptedImage.pipe(process.stdout); ```

      在这个示例中,我们首先创建了一个加密函数,用于解密加密的图像。然后,我们获取了一个加密的图像和一个解密的密钥,然后使用这些信息解密图像。最后,我们将解密后的图像保存到本地文件。

      注意:这个示例需要你已经在本地计算机上安装了 Crypto-JS,并且你的加密密钥是 "your_key"。你需要将 "your_image" 替换为你想要解密的图像的 URL。

      此外,这个示例使用的是 AES-GCM 加密算法,这是一个常见的加密算法。你也可以使用其他加密算法,例如 RSA 或 SHA-256。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部