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'));