如何对nodejs代码加密?国内,除了 jshaman 还有别的nodejs保护提供商吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对nodejs代码加密?国内,除了 jshaman 还有别的nodejs保护提供商吗?相关的知识,希望对你有一定的参考价值。

如何对nodejs代码加密?国内,除了 jshaman 还有别的nodejs保护提供商吗?

JS代码加密,JShaman就非常好用,国内目前好像没有别的了,这个最专业。 参考技术A 可以用webpack 进行混淆,因为最近的一个项目用electron 写东西,boss想增加一点被破解的成本
source:
var webpack = require(‘webpack’);
var path = require(‘path’);
let config =
entry:
main: path.resolve(__dirname, ‘src/main.js’)
,
output:
path: path.resolve(__dirname, “dist”),
publicPath: ‘./dist/’,
libraryTarget: ‘commonjs’,
filename: ‘[name].js’
,
module:
loaders: [

test: /.json$/,
loader: ‘json’
,
test: /.js?$/, loader: ‘babel’, exclude: /node_modules/,

test: /.(png|jpe?g|gif|svg)(?.*)?$/,
loader: ‘url?limit=1’

]
,
vue:
loaders:
,
babel:
presets: [‘es2015’],
plugins: [‘transform-runtime’]
,
plugins: [
new webpack.optimize.UglifyJsPlugin(
compress:
warnings: false
,
mangle:
except: [’$super’, ‘$’, ‘exports’, ‘require’]

)
],
watchOptions:
aggregateTimeout: 1000,
poll: 2000
,
resolve:
alias:
reportConf: path.resolve(__dirname, ‘./src/config.js’)

,
externals:
“fs”: “fs”,
“url”: “url”,
“path”: “path”,
“crypto”: “crypto”,
“async”: “async”,
“canvas”: “canvas”,
“gm”: “gm”,
“xlsx”: “xlsx”,
“lodash”: “lodash”,
“mkdirp”: “mkdirp”,
“pdfkit”: “pdfkit”,
“electron”: “electron”,
“node-notifier”: “node-notifier”,
“electron-json-storage”: “electron-json-storage”

;
if (process.env.NODE_ENV == ‘dev’)
config.resolve.alias.reportConf = path.resolve(__dirname, ‘./src/config.dev.js’);

module.exports = config;
说明 :
libraryTarget: ‘commonjs’, 打包方式
externals:

,排除引用到的node_module
new webpack.optimize.UglifyJsPlugin 核心了
当然也可以用gulp ,grunt 等进行,
实现的效果就是,你的整个node_module 被压缩,混淆在一个min.js 里面了

nodeJS之crypto模块公钥加密及解密

nodeJS之crypto模块公钥加密及解密

NodeJS有以下4个与公钥加密相关的类。
1. Cipher: 用于加密数据;
2. Decipher: 用于解密数据;
3. Sign: 用于生成签名;
4. Verify: 用于验证签名;

在使用公钥加密技术时,需要使用公钥及私钥,公钥是用于创建只有私钥的拥有者能够读出的加密数据,以及对私钥的拥有者的签名进行验证;私钥是用于解密数据以及对数据进行签名。

一:加密数据
在crypto模块中,Cipher类用于对数据进行加密操作;我们可以通过如下两种方式创建cipher对象;

1.1 createCipher方法;该方法使用指定的算法与密码来创建cipher对象。该方法使用方式如下:

crypto.createCipher(params, pasword);

该方法使用两个参数,第一个参数用于指定在加密数据时所使用的算法,比如 ‘ase-256-cbc‘这些等,第二个参数用于指定加密时所使用的密码,该参数值必须为一个二进制格式的字符串或一个Buffer对象。

createCipher 方法返回一个被创建的cipher对象。

1.2 createCipheriv方法;该方法使用指定的算法、密码与初始向量、来创建cipher对象,使用方法如下所示:

crypto.createCipheriv(params, password, iv);

该方法的第一个参数是在加密数据时所使用的算法,比如 ‘ase-256-cbc‘等等,第二个参数用于指定加密时所使用的密码,该参数值必须为一个二进制格式的字符串或一个Buffer对象。 第三个参数指定加密时所使用的初始向量,参数值也必须为一个二进制格式的字符串或一个Buffer对象。
该方法返回的也是一个被创建的cipher对象。

1.3 在上面通过两种方式创建了cipher对象后,可以通过使用该对象的update方法来指定需要被加密的数据,该方法使用的方式如下:

cipher.update(data, [input_encoding], [output_encoding])

其中第一个参数为必选项(其他的参数为可选项), 该参数值是一个Buffer对象或一个字符串,用于指定需要加密的数据。第二个参数用于指定被加密的数据所使用的编码格式,可指定参数值为 ‘utf-8‘, ‘ascii‘ 或 ‘binary‘. 如果不使用第二个参数的话,那么第一个参数必须为一个Buffer对象。
第三个参数用于指定输出加密数据时使用的编码格式,可指定的参数值为 ‘hex‘, ‘binary‘ 或 ‘base64‘ 等。如果不使用第三个参数的话,该方法就返回了一个存放了加密数据的Buffer对象。

1.4 可以使用cipher对象的final方法来返回加密数据。当该方法被调用时,任何cipher对象中所缓存的数据都将被加密。在使用了cipher对象的final方法
后,不能再向cipher对象中追加加密数据,该方法使用方式如下:

cipher.final([output_encoding]);

该方法使用一个可选参数,该参数值为一个字符串,用于指定在输出加密数据的编码格式,可指定参数值为 ‘hex‘, ‘binary‘, 及 ‘base64‘. 如果使用了
该参数,那么final方法返回字符串格式的加密数据,如果不使用该参数,那么该方法就返回一个Buffer对象。

具体使用的代码如下:

const crypto = require(‘crypto‘);

/*
 下面是使用加密算法对 ‘我不是笨蛋‘ 几个字进行加密,所加密使用的密码是 123456
*/
const data = ‘我不是笨蛋‘;
const password = ‘123456‘;

// 创建加密算法
const aseEncode = function(data, password) {

  // 如下方法使用指定的算法与密码来创建cipher对象
  const cipher = crypto.createCipher(‘aes192‘, password);

  // 使用该对象的update方法来指定需要被加密的数据
  let crypted = cipher.update(data, ‘utf-8‘, ‘hex‘);

  crypted += cipher.final(‘hex‘);

  return crypted;
};

console.log(aseEncode(data, password)); // 输出 ebdf98c254b9aa5265f6d4a5e73f861d

二:解密数据

在crypto模块中,Decipher类用于对加密后的数据进行解密操作。
创建一个decipher对象,可以通过如下两种方式进行创建:

2.1 createDecipher方法,该方法使用指定的算法与密码来创建 decipher对象,该方法使用的方式如下:

crypto.createDecipher(params, password);

在该方法中,第一个参数用于指定在解密数据时所使用的算法,比如 ‘aes-256-cbc‘等,该算法必须与加密数据时所使用的算法保持一致。
第二个参数用于指定解密时所使用的密码,其参数值为一个二进制格式的字符串或一个Buffer对象,该密码同样必须与加密该数据时所使用的密码保持一致。

createDecipher方法返回一个被创建的 decipher对象。

2.2 createDecipheriv方法;该方法使用指定的算法、密码与初始向量来创建decipher对象。该方法使用如下所示:

crypto.createDecipheriv(params, password, iv);

在该方法中,第一个参数用于指定在解密数据时所使用的算法,比如 ‘aes-256-cbc‘等,该算法必须与加密数据时所使用的算法保持一致。第二个参数用于指定解密时所使用的密码,参数值必须为一个二进制格式的字符串或一个Buffer对象,同样的道理,该密码必须与加密该数据时所使用的密码保持一致。 
第三个参数用于指定解密时所使用的初始向量,该参数值也必须为一个二进制格式的字符串或者一个Buffer对象,该初始向量必须与加密该数据时所使用的初始向量保持一致。

2.3 在创建了decipher对象之后,可以通过使用该对象的update方法来指定需要被解密的数据。该方法使用如下所示:

decipher.update(data, [input_encoding], [output_encoding]);

在该方法中,第一个参数为一个Buffer对象或一个字符串,用于指定需要被解密的数据,第二个参数用于指定被解密数据所使用的编码格式,可指定的参数值为 ‘hex‘, ‘binary‘, ‘base64‘等,如果不使用第二个参数的话,那么参数值必须为一个buffer对象。第三个参数用于指定输出解密数据时使用的编码格式,可选参数值为‘utf-8‘, ‘ascii‘ 或 ‘binary‘;

2.4 可以使用decipher对象的final方法来返回经过解密之后的原始数据,该方法使用如下所示:

decipher.final([output_encoding]);

在该对象的final方法中,使用了一个可选参数,参数值为一个字符串,用于指定在输出解密数据时使用的编码格式,可指定参数值为 ‘utf-8‘, ‘ascii‘ 或 ‘binary‘;
如果使用了 该参数,final返回字符串格式的解密数据,如果不使用该参数,final方法返回一个Buffer对象。

如下解密数据的代码:

const crypto = require(‘crypto‘);

/*
 下面是使用加密算法对 ‘我不是笨蛋‘ 几个字进行加密,所加密使用的密码是 123456
*/
const data = ‘我不是笨蛋‘;
const password = ‘123456‘;

// 创建加密算法
const aseEncode = function(data, password) {

  // 如下方法使用指定的算法与密码来创建cipher对象
  const cipher = crypto.createCipher(‘aes192‘, password);

  // 使用该对象的update方法来指定需要被加密的数据
  let crypted = cipher.update(data, ‘utf-8‘, ‘hex‘);

  crypted += cipher.final(‘hex‘);

  return crypted;
};

console.log(aseEncode(data, password)); // 输出 ebdf98c254b9aa5265f6d4a5e73f861d

// 创建解密算法
const aseDecode = function(data, password) {
  /* 
   该方法使用指定的算法与密码来创建 decipher对象, 第一个算法必须与加密数据时所使用的算法保持一致;
   第二个参数用于指定解密时所使用的密码,其参数值为一个二进制格式的字符串或一个Buffer对象,该密码同样必须与加密该数据时所使用的密码保持一致
  */
  const decipher = crypto.createDecipher(‘aes192‘, password);

  /*
   第一个参数为一个Buffer对象或一个字符串,用于指定需要被解密的数据
   第二个参数用于指定被解密数据所使用的编码格式,可指定的参数值为 ‘hex‘, ‘binary‘, ‘base64‘等,
   第三个参数用于指定输出解密数据时使用的编码格式,可选参数值为 ‘utf-8‘, ‘ascii‘ 或 ‘binary‘;
  */
  let decrypted = decipher.update(data, ‘hex‘, ‘utf-8‘);

  decrypted += decipher.final(‘utf-8‘);
  return decrypted;
}; 

console.log(aseDecode(aseEncode(data, password), password)); // 输出  我不是笨蛋

以上是关于如何对nodejs代码加密?国内,除了 jshaman 还有别的nodejs保护提供商吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用nodejs搭建开发环境

在国内,除了看中星9号外,还可以看那颗卫星上的节目

NodeJs使用md5对数据加密

nodeJS之crypto模块公钥加密及解密

国内在线教育网站如何做视频加密和视频安全

揭秘!业界创新的代码仓库加密技术