nodejs 加密如何加密源代码

关于nodejs 怎么实现 crypto des加密_百度知道
关于nodejs 怎么实现 crypto des加密
我有更好的答案
var&crypto&=&require('crypto');var&key&=&';;exports.des&=&{&&algorithm:{&ecb:'des-ecb',cbc:'des-cbc'&},&&encrypt:function(plaintext,iv){&&&&var&key&=&new&Buffer(key);&&&&var&iv&=&new&Buffer(iv&?&iv&:&0);&&&&var&cipher&=&crypto.createCipheriv(this.algorithm.ecb,&key,&iv);&&&&cipher.setAutoPadding(true)&//default&true&&&&var&ciph&=&cipher.update(plaintext,&'utf8',&'base64');&&&&ciph&+=&cipher.final('base64');&&&&return&&&},&&decrypt:function(encrypt_text,iv){&&&&var&key&=&new&Buffer(key);&&&&var&iv&=&new&Buffer(iv&?&iv&:&0);&&&&var&decipher&=&crypto.createDecipheriv(this.algorithm.ecb,&key,&iv);&&&&decipher.setAutoPadding(true);&&&&var&txt&=&decipher.update(encrypt_text,&'base64',&'utf8');&&&&txt&+=&decipher.final('utf8');&&&&return&&&}};
采纳率:96%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。《Nodejs开发加密货币》之四:Nodejs让后台开发像前端一样简单
上一篇文章,简单介绍了Nodejs,搭建了开发环境,并轻松完成了。本文,我们更进一步,看看如何实现更加复杂的业务逻辑,如何构建自己的Api。
为什么要用后台?就我们这个统计分析项目(Sacdl项目)而言,仅前台几个文件已经足够。但是,多数项目业务更加复杂,没有后台办不成事。
另外,前端处理能力有限,特别是web应用,前端代码越简单越好,对于性能和用户体验都有好处。反观我们的Sacdl项目,显然对于数据的整理更适合在后台处理。
再者,大家知道,Bitcoin或其他竞争币的核心,通常会提供Json格式的Api,我们只要在后台对这些Api进行操作,实现自己的业务逻辑,就能很轻松实现区块链(如:blockchain.info)、钱包、支付等基本应用。因此,直接学习如何处理第三方Api,对于我们快速上手基于区块链开发应用,是有直接帮助的。
明确要干什么,很重要。
从后台读取github.com的A 处理读取的数据,并发送给前端;
很明显,我们需要重构前端代码。
下文仍以Sacdl工程为例,引入Express框架,并以此为基础进行开发重构。
基于Nodejs的开发框架很多,而Express是最基础、最出众的一个,很多其他的框架都是基于它构建的,比如严格模仿ruby on rails的sails框架等。
(1)安装Express
cnpm install express --save
说明:安装 Nodejs 模块时,如果指定了 &save 参数,那么此模块将被添加到 package.json 文件中的 dependencies 依赖列表中。以后,就可以通过 npm install 命令自动安装依赖列表中所列出的所有模块。
(2)创建简单应用
进入工程目录,新建文件 app.js,输入如下内容:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
var server = app.listen(3000, function () {
var host = server.address().
var port = server.address().
console.log('Example app listening at http://%s:%s', host, port);
然后,运行下面的命令:
$ node app.js
最后,用浏览器打开 http://localhost:3000/ ,可以看到 hello world!输出。
这官网的例子,是一个完整的web应用。也可以理解为一个服务器软件,不过是仅仅在3000端口,提供了一个简单的web服务。
如果,你对上篇gulp的管道概念有了一定认识,你也可以想象成,我们已经搭建了一条从后台到前端的管道。剩下的工作,就是给这条管道添加各种处理装置,让水流(数据流)实现我们的要求。关于流的概念,我们会在下一篇再次总结一下。
(3)使用模板引擎
上面,我们直接将hello world发送给了浏览器,如果是html文件该怎么做呢?Nodejs没有直接渲染模板的功能,需要用到第三方插件,如:jade,ejs,hbs等
这里,咱们用ejs,它就像java的,rails的rhtml,直接在html文件里嵌入代码,简单好用。下面,安装它:
$ cnpm install ejs --save
然后,用app.set设置我们的第一个管道过滤器,修改上述代码如下:
-------其他-------
app.set('views', './views')
app.set('view engine', 'ejs')
app.get('/', function (req, res) {
res.render('index');
-------其他-------
我们新建views文件夹(把视图文件暂时放在这里),在views里新建index.ejs,打开它,把hello imfly!拷贝过去。
重启服务器(ctrl + C关闭,然后再用node app命令打开),刷新浏览器,看到变化,证明模板启用成功。
(4)使用静态文件服务
我们的前端,只有public/index.html文件。现在,将它的代码复制到views/index.ejs文件里,并修改js,css引用。重启,刷新,啊,一堆乱码,按下F12,打开浏览器控制台,看到一堆404错误,我们的js,css文件都没有成功加载,怎么回事?
到目前为止,我们仅提供了/地址下的路由请求,其他任何地址,Nodejs都默认转向404错误。怎么办?一个个添加吗,显然不是,这类静态文件,express提供了简单的方法:
app.use(express.static('./public', {
maxAge: '0', //no cache
etag: true
app.get('/', function (req, res) {
这是咱们使用的第二个管道过滤器,上面的代码意思是,在public下的文件,包括js,css,images,fonts等都当作静态文件处理,根路径是./public,请求地址就相对于/,比如:./public/js/app.js文件,请求地址就是
说明:这里有一个小问题,使用bower安装的前端第三方开发包,都在bower_components文件夹下,需要移到public文件夹里。同时需要添加一个.bowerrc文件,告诉bower安装目录改变了,并修改gulpfile.js文件。当然也可以连同bower.json文件都拷贝到public文件夹里。
重启服务,刷新页面,我们看到了久违的页面。
vcHLuvPMqKGjsru5/aOs1eLA79PQuPa4/LrDtcS3vbC4o6xnaXRodWLM4bmpwctOb2RlanPKudPDtcS/qreisPyjrM7Sw8e/ydLU1rG909PDo7o8L3A+DQo8cHJlIGNsYXNzPQ=="brush:">
cnpm install github --save
官方地址:https://github.com/mikedeboer/node-github
为什么会想到这个方案?一个方法是,认真官方文档,看它提供了什么资源;另一方法是,京城去https://npmjs.com上搜搜。通常,成熟的产品,一般都会提供现成的方案。
该组件集成了githubApi的几乎全部内容,当然包括搜索功能。下面,让我们试试,把下面的代码拷贝到app.js:
var GitHubApi = require(&github&);
//下面的代码放在app.get('/', ...)之前
app.get('/search', function(req, res){
var msg = {
q: 'bitcoin',
sort: 'forks',
order: 'desc',
per_page: 100
github.search.repos(msg, function(err, data) { //这里必须用`回调`函数,不能使用 var data = ...的方式,下篇细说
res.json(data); //输出json格式的数据
在浏览器里请求 http://localhost:3000/search, 可以看到与请求https://api.github.com/search/repositories?q=bitcoin&sort=forks&order=desc&per_page=100 一样的结果(样式可能不同)
http://localhost:3000/search 就是我们自己的Api服务,如果有自己的或其他逻辑业务,数据很容易融合进去。
让前端请求这个api,修改public/js/app.js 34行的代码,如下:
url = url || 'http://localhost:3000/search'; //默认请求的页面
在浏览器里请求 http://localhost:3000/,结果与原来相同。这样我们就简单实现了,后台处理数据,前台展示数据。
(6)模块化重构
到目前为止,我们都是在修改app.js,不断往里面添加各种管道过滤器。如果业务复杂,这个文件会非常大。事实上,任何一个Nodejs应用,都可以压缩成这样一个js文件。这就能轻松理解,为什么多数js框架都习惯带着js后缀了吧,因为它本身就是一个js文件。
但,这样不适合开发和维护。我们需要把它分解成一个个独立的文件,通过名字就能分辨它的用处,通过名字就能直接用它,这就是Nodejs的模块化开发。
Nodejs的模块化非常简单。记住这样一个简单的逻辑关系:通常一个module.exports可以定义一个模块;一个文件只包含一个模块;只要是模块就可以使用require()方法在其他地方引用。样式与我们的前端代码非常相似,如下:
//文件 /path/to/moduleName.js
//局部变量
var a = ''
//公共方法(直接导出模块)
var moduleName = {} 或 function(){} //总之就是一个对象
//私有方法
function fun1(){}
//导出模块
module.exports = moduleN
在其他文件中,我们可以这样用:
var moduleName = require('/path/to/moduleName'); //默认js后缀,习惯不用带
//然后,直接调用moduleName的各对象或方法就是了
按这个方式,我们把app.js文件,拆分成典型的MVC的开发样式,比如,熟悉ruby on rails的朋友,都习惯把代码分开保存在controllers,models和views文件夹里,以及router文件,这里,我们仿效之。视图已经定义在了views文件夹下,下面我们重点拆分其他的。
a)拆分模型
模型model专门处理数据,无论是数据库,还是请求远程api资源,都应该是它的事。自然,我们可以把githubApi的请求独立出来,这么做:
新建文件夹和文件 app/models/repo.js,剪切粘贴下面的代码
var GitHubApi = require(&github&);
* from https://www.npmjs.com/package/github
* @type {GitHubApi}
var github = new GitHubApi({
// required
version: &3.0.0&,
// optional
debug: false,
protocol: &https&,
host: &api.github.com&, // should be api.github.com for GitHub
pathPrefix: &&, // for some GHEs; none for GitHub
timeout: 5000,
headers: {
&user-agent&: &My-Cool-GitHub-App& // GitHub is happy with a unique user agent
var Repo = {
search: function(msg, callback) {
var msg = msg || {
q: 'bitcoin',
sort: 'forks',
order: 'desc',
per_page: 100
github.search.repos(msg, callback);
module.exports = R
说明:模型Model是资源的集合,就像数据库里的一张表,名字自然用资源类的名词表示最好。对数据的增删改查都在模型里,自然在前端public/js/utils.js里的部分代码就应该转移到这里,从而直接输出treemap的数据格式,例如:
// from /public/js/utils.js
function treeData(data) {
var languages = {};
var result = {
&name&: &languages&,
&children&: []
b)拆分控制器
控制器负责从模型请求数据,并把数据发送到前端,是前端和后台的调度员。这里,app.get方法里的匿名函数便是,我们分别把他们抽取出来,放在app/controllers/repos.js里,并把请求githubApi的代码用模型代替,代码如下:
var Repo = require('../models/repo');
var Repos = {
//get '/'
index: function(req, res) {
res.render('index');
//get '/search'
search: function(req, res) {
Repo.search(req.query.query, function(err, data) {
res.json(data);
module.exports = R
说明:按照惯例,控制器的名称,通常是对应模型的名称(名词)的复数;行为的名称,通常是动作(动词),因此repos.index就表示版本库列表,repos.search就是搜索版本库信息,在app.js中,自然这样调用:
----其他代码----
var repos = require('./app/controllers/repos');
app.get('/search',
repos.search);
app.get('/',
repos.index);
----其他代码----
这部分代码,起到分发路由的作用,一看便知应该在路由里,于是继续重构。
c)拆分路由
新建文件app/router.js, 把上面的代码剪切过来,修改为:
var repos = require('./controllers/repos');
var Router = function(app) {
app.get('/search', repos.search);
app.get('/', repos.index);
module.exports = R
在app.js里,简单调用:
var router = require('./app/router');
router(app);
以后,再添加其他的任何路由,只要修改router.js就是了。
d)整理视图
把views整体移动到app/views下,并修改app.js代码,让模板引擎指向该文件夹
app.set('views', './app/views')
然后,新建app/views/repos文件夹,将views/index.ejs文件移入。
说明:视图view是界面元素,通常是类html文件,按照惯例,它的文件夹与控制器同名repos,各文件名与控制器的行为action同名,如index -& index.ejs
当然,视图根据模板引擎的特点,也可以进行模块化处理,进一步细化为layout.ejs, header.ejs等,方便重复使用。限于篇幅,不再罗嗦。详情,请看。
经过这样的模块化整理,我们轻松实现了一个简单的MVC框架(如图),它的易用性、扩展性得到很大提升。我们已经可以快速添加更多的功能了,比如:像巴比特那样显示主流交易市场信息(下篇)。
(7)测试(略)
无测试不产品。不过咱们还是省了吧,不然,又要很长的篇幅。本项目仅作文章辅助,不能作为产品使用。如果非要用,建议您写写测试,不然后果自负。
说到这的时候,本人就有一个问题没有解决:我的办公室有代理,通过Nodejs请求api.github.com是不成功的,但在家里就可以。这个问题,就留给高手去解决吧。
我们的方向是文章,每个细节都想完美,最终的结果就会不完美。很多程序员在某个时期,会不自觉的陷入技术细节,而忽略很多重要的东西。最严重的是,很多人始终都没有拿出过一个完整的产品,像样的更不用说了。&使劲看就是盲,太专注就是愚&,值得深思。
(8)部署(略)
自己找个服务器,折腾折腾吧。
本文涉及的代码非常简单,但在严格控制字数的情况下,仍然罗嗦了这么多。所以,很多时候,语言的力量非常苍白,说这么多干嘛,做就是了。
文中,对输入框的处理没有说明,请自己查看源码(写到这个时候,其实还没有做)。模块化部分,其实已经有一个叫express-generator的插件,可以一键生成,所以很多优秀的资源,自己去探索吧。不过窃以为,该说的重点基本提到。
总体来说,使用Nodejs,从前端到后台并不复杂,或者说非常简单。前后语言的统一,给我们减少了很多思维转换的麻烦。如果你能完整实践这两篇文章,我个人认为,Nodejs应该可以入门了。
但是,要想看明白一些复杂的代码,还需要掌握Nodejs的一些独特习惯,比如回调,比如对异常的处理等等,请看下一篇:《Nodejs开发货币》之四:您必须知道的几个Nodejs编码习惯,仍以sacdl项目为例,添加展示主流交易市场信息等功能,目标是简单介绍一些大家经常遇到的坑,以便在接下来的代码分析中更加轻松。nodejs对密码加密处理方法总结-js教程-PHP中文网QQ群微信公众号还没有收藏nodejs对密码加密处理方法总结这次给大家带来nodejs对密码加密处理方法总结,nodejs对密码加密处理的有哪些,下面就是实战案例,一起来看一下。本文实例讲述了nodejs中密码加密处理操作。分享给大家供大家参考,具体如下:一、关于node加密模块crypto的介绍其实就是使用MD5加密的,不太安全,在实际开发中根据自己的方案进行加盐处理二、在路由视图中使用加密方式1、导入node自带的加密模块(不需要安装)//导入加密模块
const crypto = require(&crypto&);2、做一个,密码加密的视图&p class=&col-md-6&&
&h4&用户注册&/h4&
&form role=&form& method=&post& action=&/regest&&
&p class=&form-group&&
&label for=&username&&用户名:&/label&
&input id=&username& type=&text& placeholder=&请输入用户名& name=&username& class=&form-control&/&
&p class=&form-group&&
&label for=&password&&密码:&/label&
&input id=&password& type=&password& placeholder=&请输入密码& name=&password& class=&form-control&/&
&p class=&form-group&&
&input type=&submit& value=&提交& class=&btn btn-success&/&
&/p&router.post(&/regest&,(req,res)=&{
console.log(req.body);
let name = req.body.
let password = req.body.
let md5 = crypto.createHash(&md5&);
let newPas = md5.update(password).digest(&hex&);
db(&insert into user1(name,password) values(?,?)&,[name,newPas],(err,data)=&{
res.send(&注册失败&);
console.log(data);
if (data){
res.send(&注册成功&);
});三、进行密码校验1、把用户输入的密码用同样的方式加密处理2、把加密后的密码与数据库中匹配router.post(&/login&,(req,res)=&{
let name = req.body.
let password = req.body.
let md5 = crypto.createHash(&md5&);
let newPas = md5.update(password).digest(&hex&);
db(&select * from user1 where name = ?&,[name],(err,data)=&{
console.log(data[0].password);
res.send(&发生错误&);
if (data){
if (data[0].password === newPas){
res.send(&登录成功&);
res.send(&用户名或密码错误&);
})&p class=&col-md-6&&
&h4&用户登录&/h4&
&form role=&form& method=&post& action=&/login&&
&p class=&form-group&&
&label for=&username2&&用户名:&/label&
&input id=&username2& type=&text& placeholder=&请输入用户名& name=&username& class=&form-control&/&
&p class=&form-group&&
&label for=&password&&密码:&/label&
&input id=&password& type=&password& placeholder=&请输入密码& name=&password& class=&form-control&/&
&p class=&form-group&&
&input type=&submit& value=&提交& class=&btn btn-success& id=&sub-btn2&/&
&/p&四、扩展(一般我们加密处理)1、利用随机数随机生成多少位数2、利用可逆加密把第一步的生成的随机数加密 可逆加密有Base64和Hex加密(具体自己百度)3、将第二步加密好的随机数与我们真实密码拼接在一起4、将第三步进行加密(MD5)5、将第四步进行可逆加密6、将第二步与第五步生成的拼接成密码五、扩展(一般我们加密的登录)1、登录时候获取密码2、从获取的密码中截取随机数加密的那段3、重复操作上面加密的方式(3,4,5,6)相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!推荐阅读:以上就是nodejs对密码加密处理方法总结的详细内容,更多请关注php中文网其它相关文章!共3篇88点赞收藏.php.cn&猜你喜欢PHP中文网:独家原创,永久免费的在线,php技术学习阵地!
All Rights Reserved | 皖B2-QQ群:关注微信公众号如何保密nodejs工程的代码_百度知道
如何保密nodejs工程的代码
我有更好的答案
自己实现一个 require 吧,这个require是先进行解密,然后调用nodejs require,js 文件可以加密成对应的加密文件,这样子执行的其实还是原文件,log都是正常的一般来说代码加密都是在加载器loader上做手脚,java的加密就是自定义classLoader
采纳率:88%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
nodejs的加密解密代码示例如下:#!/usr/bin/env node
var crypto = require('crypto');
function decode(cryptkey, iv, secretdata) {
decipher = crypto.createDecipheriv('aes-256-cbc', cryptkey, iv),
= decipher.update(secretdata, 'base64', 'utf8');
decoded += decipher.final( 'utf8' );
function encode(cryptkey, iv, cleardata) {
encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv),
= encipher.update(cleardata, 'utf8', 'base64');
encoded += encipher.final( 'base64' );
= crypto.createHash('sha256').update('__tazai_wolf__key').digest(),
= &Hello World&,
= encode( cryptkey, iv, buf );
= decode(cryptkey, iv, enc);
function b64enc(data) {
= new Buffer(data, 'binary');
return b.toString('base64');
console.warn(&Encoded length: &, enc);
console.warn(&Decoded all: & + dec);请问php能相应的加密解密代码应该如何写?
要求能解上面加密后的如:Gpkr1WGBFhMvNd/Hr0eaBg==
也能加密数据给nodejs进行解密。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
使用php的openssl_encrypt和openssl_decrypt,可以方便地实现,可参考如下代码:
$key = hash('sha256','__tazai_wolf__key', true);
$iv = "0000";
$text = "Hello World";
$encrypted = openssl_encrypt($text,'aes-256-cbc',$key,false,$iv);
$decrypted = openssl_decrypt($encrypted,'aes-256-cbc',$key,false,$iv);
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。}

我要回帖

更多关于 nodejs md5加密 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信