2016-05-26 16:41 1069人阅读 评论(0) 收藏 举报算法
分类:安全
nodejs(2) ui
版权声明:本文为博主原创文章,未经博主容许不得转载。加密
在信息化的时代,信息安全是个很大的问题。为了尽量的减小不安全的因素,咱们会在开发的过程当中会对相应的信息进行加密解密,典型的应用就是针对第三方的支付的问题。本文主要介绍了MD5和RSA在Nodejs中的应用.net
MD5(单向散列算法):输入任意长度的信息,通过处理,输出为128位的信息(数字指纹);不一样的输入获得的不一样的结果(惟一性);根据128位的输出结果不可能反推出输入的信息(不可逆)。
有在线的验证的地址:http://tool.chinaz.com/Tools/MD5.aspxcode
先上代码:orm
//加密 var crypto = require('crypto'); var content = 'password' var md5 = crypto.createHash('md5'); md5.update(content); var sign = md5.digest('hex'); console.log(sign); //解密 var verifysign = crypto.createHash('md5').update(content, 'utf8').digest("hex"); //获得verifysign if (verifysign == sign) { console.log("验证成功!"); } if (verifysign != sign) { console.log("验证失败!"); }
咱们能够在作加密的时候本身设置一个不对外公开的key.拼接到要加密的内容里面blog
RSA是非对称加密算法
设若甲有一份需保密的数字商业合同发给乙签署。通过以下步骤:
1. 甲用乙的公钥对合同加密。
2. 密文从甲发送到乙。
3. 乙收到密文,并用本身的私钥对其解密。
4. 解密正确,经阅读,乙用本身的私钥对合同进行签署。
5. 乙用甲的公钥对已经签署的合同进行加密。
6. 乙将密文发给甲。
7. 甲用本身的私钥将已签署合同解密。
8. 解密正确,确认签署。
首先生成公私钥,而后将生成的公钥上传到应用公钥,步骤以下:
Linux用户(以Ubuntu为例) $ openssl 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt Java开发者须要将私钥转换成PKCS8格式 OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥 OpenSSL> exit ## 退出OpenSSL程序 Windows用户在cmd窗口中进行如下操做: C:\Users\Hammer>cd C:\OpenSSL-Win32\bin 进入OpenSSL安装目录 C:\OpenSSL-Win32\bin>openssl.exe 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt Java开发者须要将私钥转换成PKCS8格式 OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥 OpenSSL> exit ## 退出OpenSSL程序
生成公钥私钥以后就可使用他们进行加密解密了。
代码:
var crypto = require('crypto') ,fs = require('fs'); var privatePem = fs.readFileSync('./pem/rsa_private_key.pem'); var publicPem = fs.readFileSync('./pem/rsa_public_key.pem'); var key = privatePem.toString(); var pubkey = publicPem.toString(); var data = "cdss"; //加密 var sign = crypto.createSign('RSA-SHA256'); sign.update(data); var sig = sign.sign(key, 'hex'); console.log(sig); //解密 var verify = crypto.createVerify('RSA-SHA256'); verify.update(data); console.log(verify.verify(pubkey, sig, 'hex'));