您的位置:首页 > Web前端 > Node.js

nodejs加密模块crypto

2015-10-30 18:34 711 查看



nodejs加密模块crypto

前言:nodejs加密模块,对数据进行加密。做了一个关于钱的项目就各种加密,研究了一下还是遇到不少坑,所以记录下来以免重复踩坑。

crypto的官网API地址:https://nodejs.org/api/crypto.html,API记录很全,这里记录一些坑。

一 .记录几个比较常用的加密方法

1 crypto.getHashes(),Returns an array with the names of the supported elliptic curves.

2 crypto.getCiphers(); Returns an array with the names of the supported ciphers.

3 crypto.createHash(algorithm).update(value, incode).digest(outcode);

hash算法,algorithm:方法1里得到的一些算法,value:待加密的值,incode:输入编码,outcode:输出编码

4 crypto.createHmac(algorithm, key).update(value,incode).digest('hex')

HMAC算法,algorithm:方法1里得到的一些算法,key:加密的密钥,value:待加密的值,incode:输入编码,outcode:输出编码

5 var ll = crypto.createCipher(algorithm, key)

ll.setAutoPadding(true)

ll.update(value, incode,outcode)

pd = ll.final(outcode);

公开密钥加密:algorithm:方法2里得到的一些算法,key:加密的密钥value:待加密的值,incode:输入编码,outcode:输出编码

二.示例

1.非对称加密:用公钥进行加密(客户端公钥加密,后台私钥解密)

2.对称加密  :双方使用同一密钥进行加密解密(对密码一类敏感数据进行加密)

非对称加密:

1.公钥var public_key = '-----BEGIN PUBLIC KEY-----\n' +

    'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG7ddw3jARDZ6dX//og7sQXiTS\n' +

    'ljCFSqCxh14dz5J2byacgkNJY63spPB7NrDZetvqMTMz1q5ebl//cvmtTV3rtrZ2\n' +

    'Ds3OlGSRCb52p+zV+i+5vW56mZAXlgShRLzkQ9D3cxO7Crss+DiCPxe76RVlFzWP\n' +

    '48fNhbxG/MaZB4f9nwIDAQAB\n' +

    '-----END PUBLIC KEY-----';

公钥的开头结尾一定要加上'-----BEGIN PUBLIC KEY-----\n' 、 '-----END PUBLIC KEY-----',不然会报错。

然后用公钥对密钥进行加密,这里使用ursa模块,因为没找到crypto里关于公钥加密的例子,⊙﹏⊙b汗,哪位大神如果知道欢迎指教。

下面是代码片段

var ursa = require('ursa');

var encoding = require('encoding');

var clientModulusBit = 512;

var clientMaxBit = clientModulusBit / 8;

var serverMaxBit = serverModulusBit / 8;

var serverRealBit = serverMaxBit - 11;

var clientRealBit = clientMaxBit - 11;

var padding = ursa.RSA_PKCS1_PADDING;

var pub = ursa.createPublicKey(public_key);

var dd = getUuid(); //随机数(动态密钥),用来加密敏感数据的。

var d_key = encrypt(dd, pub, clientRealBit, padding) //公钥加密后的动态秘钥,传到后台。

//加密方法

function encrypt(plain, publicKey, realBit, padding) {

var start1 = 0;

var end1 = realBit;

var result1 = '';

var originBuff = new Buffer(plain);

var originByte = bytes(plain, 'utf8');

while (start1 < originByte) {

var originTmp = originBuff.slice(start1, end1);

result1 += publicKey.encrypt(originTmp, 'binary', 'binary', padding);

start1 += realBit;

end1 += realBit;

}

var encrypted = encoding.convert(result1, 'binary', 'base64');

return encrypted.toString();

}

2对称加密:直接上代码

var pub = req.body.dd;//动态密钥

var pd;

//DES_EDE3的加密key只能是24位,只能是24位,只能是24位,重要的事情要说三遍!

var ll = crypto.createCipheriv('des-ede3', pub.substr(0, 24), new Buffer(0))

ll.setAutoPadding(true)

ll.update(new Buffer(req.body.password), 'utf8', 'base64')

pd = ll.final('base64');</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nodejs crypto ursa