nwjs-nodejs- 加密和解密 img 文件 (jpg) 并将解密后的数据用于 img 元素

Posted

技术标签:

【中文标题】nwjs-nodejs- 加密和解密 img 文件 (jpg) 并将解密后的数据用于 img 元素【英文标题】:nwjs-nodejs- encrypt and decrypt img file (jpg) and use the decrypted data to an img element 【发布时间】:2018-06-12 14:03:07 【问题描述】:

我用nwjs(nodejs / html / css)开发了一个桌面应用程序,现在我想把这个应用程序用于生产,所以我需要防止窃取我的资产(我的图像很贵重),nwjs提供了一个编译工具(加密)js文件而不是资产所以我想用js加密我的资产然后用nwjs工具加密js,我不太熟悉节点模块和处理js中的文件,所以我在这个任务中挣扎! 这段代码是我试图做的,但我没有达到我的目标?

加密

let crypto;
try 
    crypto = require('crypto');
 catch (err) 
    console.log('crypto support is disabled!');

var algorithm = 'aes-256-ctr',
        password = 'secret';
var fs = require('fs');
var r;

// encrypt content
var encrypt = crypto.createCipher(algorithm, password);
// decrypt content
var decrypt = crypto.createDecipher(algorithm, password);

// write file
var w;
var path = require('path');
var dirPath = './Files/';  //directory path
var fileType = '.' + 'jpg'; //file extension
var files = [];
fs2.readdir(dirPath, function (err, list) 
    if (err) throw err;
    for (var i = 0; i < list.length; i++) 
        if (path.extname(list[i]) === fileType) 
            r = fs.createReadStream('Files/' + list[i]);
            w = fs.createWriteStream('encFiles/' + list[i].replace('.jpg', ''));
            console.log(list[i]); //print the file
            // start pipe
            r.pipe(encrypt).pipe(w);
        
    
);

解密

    'use strict';
var crypt = require('crypto'),
        algorithm = 'aes-256-ctr',
        password = 'secret';

var fs = require('fs');
var zlib = require('zlib');
var toArray = require('stream-to-array');

// input file
var r = fs.createReadStream('./encFiles/an example file'); 
// decrypt content
var decrypt = crypt.createDecipher(algorithm, password);

//b64 module so i could put the base64 data to img html element
const B64 = require('b64');

const encoder = new B64.Encoder();

// start pipe
var stream = r.pipe(decrypt);

var d = stream.pipe(encoder);
d.pipe(process.stdout);

var data;
toArray(stream, function(err, arr) 
    console.log(err,arr);
    data = Buffer.concat(arr);
    console.log(data);
);
console.log(data);

感谢您在代码或其他 IDEAS 上给我 cmets

【问题讨论】:

如果您在画布或图像标签中显示图像,则可以保存它们。您在传输过程中加密它们并不重要。我见过人们渲染单个像素来避免这种情况。这样做仍然允许用户截取屏幕截图。如果您想要一个完整的证明解决方案,也许是自定义编码(或加密)将其解码为浏览器中的图像。如果浏览器窗口失去焦点,则会覆盖图像,直到它重新获得焦点。鼠标悬停也是一样。 我建议您查看this repository 中的NodeJS 加密代码以获取安全加密的示例。 @N-ate 我知道我不会为我的图像提供完全的安全性,但至少我不会把它们清楚地显示出来,这样任何人都可以打开我的文件并复制过去的图像! 【参考方案1】:

所以解决方案非常简单,我使用nw-js code protection feature 来保护我解密资产的脚本(在我的例子中是图像)(这个脚本包含解密的密钥),所以你可以实现加密/解密使用您想要的任何方法并保护您的产品随附的解密脚本(在我的情况下是桌面应用程序)。

【讨论】:

【参考方案2】:

由于您正在构建桌面应用程序,因此您可能希望为此查看 cryptojs。我仍然强烈建议您在应用程序失去焦点时为图像添加水印并隐藏它们。即使这样,也可以在不离开您的应用程序的情况下截取屏幕截图。

【讨论】:

以上是关于nwjs-nodejs- 加密和解密 img 文件 (jpg) 并将解密后的数据用于 img 元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Base64进行加密和解密

加密解密私有CA构建

如何对文档进行加密和解密

如何给加密文件解密

如何用C语言对文件进行加密和解密?急求......................

JAVA如何对URL进行加密和解密啊