『壹』 關於nodejs 怎麼實現 crypto des加密
就是加密和解密使用同一個密鑰,通常稱之為「Session Key 」這種加密技術在當今被廣泛採用,如美國政府所採用的DES加密標准就是一種典型的「對稱式」加密法,它的Session Key長度為56bits。
非對稱式加密:
就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為「公鑰」和「私鑰」,它們兩個必需配對使用,否則不能打開加密文件。
加密為系統中經常使用的功能,node自帶強大的加密功能Crypto,下面通過簡單的例子進行練習。
1、加密模塊的引用:
var crypto=require('crypto');
var $=require('underscore');var DEFAULTS = {
encoding: {
input: 'utf8',
output: 'hex'
},
algorithms: ['bf', 'blowfish', 'aes-128-cbc']
};
默認加密演算法配置項:
輸入數據格式為utf8,輸出格式為hex,
演算法使用bf,blowfish,aes-128-abc三種加密演算法;
2、配置項初始化:
function MixCrypto(options) {
if (typeof options == 'string')
options = { key: options };
options = $.extend({}, DEFAULTS, options);
this.key = options.key;
this.inputEncoding = options.encoding.input;
this.outputEncoding = options.encoding.output;
this.algorithms = options.algorithms;
}
加密演算法可以進行配置,通過配置option進行不同加密演算法及編碼的使用。
3、加密方法代碼如下:
MixCrypto.prototype.encrypt = function (plaintext) {
return $.rece(this.algorithms, function (memo, a) {
var cipher = crypto.createCipher(a, this.key);
return cipher.update(memo, this.inputEncoding, this.outputEncoding)
+ cipher.final(this.outputEncoding)
}, plaintext, this);
};
使用crypto進行數據的加密處理。
4、解密方法代碼如下:
MixCrypto.prototype.decrypt = function (crypted) {
try {
return $.receRight(this.algorithms, function (memo, a) {
var decipher = crypto.createDecipher(a, this.key);
return decipher.update(memo, this.outputEncoding, this.inputEncoding)
+ decipher.final(this.inputEncoding);
}, crypted, this);
} catch (e) {
return;
}
};
『貳』 求教nodejs怎麼對密碼進行加鹽的hash加密
以前java項目最近打算用node.js重寫,但是加密這里實在沒搞定。java中加密是:1024次加鹽sha-1加密,
一個例子:salt:47998d63768aa877,密文:,明文:yunstudio2013
下面是java代碼:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}
我在js裡面是這么乾的,但是結果一直不對,代碼如下:
//
var hash = crypto.createHmac("sha1", 「47998d63768aa877」).update(「yunstudio2013」).digest(「hex」);
for (var i = 1; i < 1024; i++) {
hash = crypto.createHmac("sha1", 「47998d63768aa877」).update(hash).digest(「hex」);
console.log(hash);
}
『叄』 nodejs裡面怎麼實現HMAC-SHA1
1)crypto模塊
crypto.createHmac('sha1',app_secret).update('待加密字串').digest().toString('base64');//base64
crypto.createHmac('sha1',app_secret).update('待加密字串').digest('hex');//16進制
2)crypto-js
varCryptoJS=require('crypto-js');
varstr='orderId=21140600050549799429&orderStatus=TRADE_SUCCESS&payTime=2014-07-2211:43:31';
varkey='REzySUKRCPfyfV/jfgwTA==';
varsign=CryptoJS.HmacSHA1(str,key).toString();
console.log(sign);
『肆』 關於nodejs 怎麼實現 crypto des加密
varcrypto=require('crypto');
varkey='12345670';
exports.des={
algorithm:{ecb:'des-ecb',cbc:'des-cbc'},
encrypt:function(plaintext,iv){
varkey=newBuffer(key);
variv=newBuffer(iv?iv:0);
varcipher=crypto.createCipheriv(this.algorithm.ecb,key,iv);
cipher.setAutoPadding(true)//defaulttrue
varciph=cipher.update(plaintext,'utf8','base64');
ciph+=cipher.final('base64');
returnciph;
},
decrypt:function(encrypt_text,iv){
varkey=newBuffer(key);
variv=newBuffer(iv?iv:0);
vardecipher=crypto.createDecipheriv(this.algorithm.ecb,key,iv);
decipher.setAutoPadding(true);
vartxt=decipher.update(encrypt_text,'base64','utf8');
txt+=decipher.final('utf8');
returntxt;
}
};
『伍』 nodejs怎樣獲取一個上傳文件的MD5碼
MD5中的MD代表Message Digest,就是信息摘要的意思,不過這個信息摘要不是信息內容的縮寫,而是根據公開的MD5演算法對原信息進行數學變換後得到的一個128位(bit)的特徵碼。
1、D5就是求字元串的md5,文件就是一個字元串;
2、前台目前就別考慮讀文件內容了(大部分瀏覽器不行) 都讓後台做;
可以直接看nodeclub源代碼,如下:
var crypto = require('crypto');
exports.encrypt = function (str, secret) {
var cipher = crypto.createCipher('aes192』, secret);
var enc = cipher.update(str, 'utf8』, 『hex』);
enc += cipher.final(『hex』);
return enc;
};
exports.decrypt = function (str, secret) {
var decipher = crypto.createDecipher('aes192』, secret);
var dec = decipher.update(str, 'hex』, 『utf8』);
dec += decipher.final(『utf8』);
return dec;
};
exports.md5 = function (str) {
var md5sum = crypto.createHash(『md5』);
md5sum.update(str);
str = md5sum.digest(『hex』);
return str;
};
exports.randomString = function (size) {
size = size || 6;
var code_string = '』;
var max_num = code_string.length + 1;
var new_pass = '』;
while (size > 0) {
new_pass += code_string.charAt(Math.floor(Math.random() * max_num));
size–;
}
return new_pass;
};