nwjs-nodejs-加密和解密img文件(jpg)并将解密后的数据用于img元素
nwjs-nodejs- encrypt and decrypt img file (jpg) and use the decrypted data to an img element
我用 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 的评论
由于您正在构建桌面应用程序,因此您可能需要查看 cryptojs。我仍然强烈建议您为图像添加水印并在您的应用程序失去焦点时隐藏它们。即使这样,也可以在不离开应用程序的情况下截取屏幕截图。
所以解决方案很简单,我使用nw-js code protection feature来保护我解密资产(在我的例子中是图像)的脚本(这个脚本包含解密的密钥),所以你可以实现encryption/decryption 使用您想要的任何方法并保护将随您的产品一起提供的解密脚本(在我的例子中是 桌面应用程序 )。
我用 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 的评论
由于您正在构建桌面应用程序,因此您可能需要查看 cryptojs。我仍然强烈建议您为图像添加水印并在您的应用程序失去焦点时隐藏它们。即使这样,也可以在不离开应用程序的情况下截取屏幕截图。
所以解决方案很简单,我使用nw-js code protection feature来保护我解密资产(在我的例子中是图像)的脚本(这个脚本包含解密的密钥),所以你可以实现encryption/decryption 使用您想要的任何方法并保护将随您的产品一起提供的解密脚本(在我的例子中是 桌面应用程序 )。