首页 > 代码库 > crypto加密解密
crypto加密解密
加密Crypto#
使用require(‘crypto‘)
可以访问该模块。
加密模块要求底层系统的OpenSSL是支持的。它提供了一个安全证书,作为一个安全的HTTPS net或HTTP连接的一部分要用于封装方式。
它还提供了一套OpenSSL的哈希,HMAC,加密,解密,签名和验证方法的包装。
crypto.createCredentials(details)#
创建一个认证对象,detail是可选的钥(key)字典的参数。
key
: 存储PEM编码私钥的字符串
cert
: 存储PEM编码证书的字符串
ca
: 能信任的PEM编码的CA证书,不是一个字符串就是一个链表。
ciphers
:一个描述使用了的或排除密码的字符串。 详见:http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT
。
如果没有具体的 ‘ca‘给定,Node.js会使用以下给定的默认的公共可信赖的CA证书集合:
http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt.
crypto.createHash(algorithm)#
创建并返回一个加密哈希对象,一个给定的算法,可用于生成哈希摘要。
algorithm
参数依赖于平台OpenSSL支持的可用算法。例如: ‘sha1‘
, ‘md5‘
, ‘sha256‘
, ‘sha512‘
, 等等。在最近的发布中, openssl list-message-digest-algorithms
会列出可用的摘要加密算法。
例子:使用sha1算法摘要一个文件
var filename = process.argv[2];
var crypto = require(‘crypto‘);
var fs = require(‘fs‘);
var shasum = crypto.createHash(‘sha1‘);
var s = fs.ReadStream(filename);
s.on(‘data‘, function(d) {
shasum.update(d);
});
s.on(‘end‘, function() {
var d = shasum.digest(‘hex‘);
console.log(d + ‘ ‘ + filename);
});
Class: Hash#
创建数据的hash摘要的类。
通过 crypto.createHash
返回。
hash.update(data, [input_encoding])#
用给定的数据 data
更新hash摘要。 input_encoding
参数允许的编码为‘utf8‘
, ‘ascii‘
或 ‘binary‘
。默认为‘binary‘
。这个方法可以多次调用(有新数据到达就可以调用) 。
hash.digest([encoding])#
计算已接收到数据的hash摘要。编码 encoding
可以是 ‘hex‘
, ‘binary‘
或 ‘base64‘
。默认为 ‘binary‘
.
注意: hash
对象在调用过 digest()
方法后不能在使用。
crypto.createHmac(algorithm, key)#
创建并返回hmac对象,一个根据给定算法和密钥加密过的hmac。
algorithm
参数依赖于平台OpenSSL支持的可用算法,详见上面的createHash。 key
参数是hmac用到的密钥。
Class: Hmac#
创建加密图形内容的类。
通过 crypto.createHmash
返回。
hmac.update(data)#
用给定的数据 data
更新hash摘要。这个方法可以多次调用(有新数据到达就可以调用)。
hmac.digest([encoding])#
计算已接收到数据的 hmac 摘要。编码 encoding
可以是 ‘hex‘
, ‘binary‘
或 ‘base64‘
。默认为 ‘binary‘
.
注意: hmac
对象在调用过 digest()
方法后不能在使用。
crypto.createCipher(algorithm, password)#
根据给定的算法和密码,创建并返回加密对象。
algorithm
依赖于OpenSSL,例如:‘aes192‘
,等等。 在最近的发布中, openssl list-message-digest-algorithms
会列出可用的摘要加密算法。 password
用于派生密钥(key)和IV,必须是二进制 ‘binary‘
编码字符串。(详见Buffer section )。
crypto.createCipheriv(algorithm, key, iv)#
根据给定的算法、密钥(key)和iv,创建并返回加密对象。
algorithm
和 createCipher()
中的是一样的。 key
是在算法中使用的原密钥。 iv
是一个初始化的向量。 key
和iv
必须是二进制 ‘binary‘
编码的字符串 (详见Buffer section )。
Class: Cipher#
加密数据的类。
通过 crypto.createCipher
和 crypto.createCipheriv
返回。
cipher.update(data, [input_encoding], [output_encoding])#
使用 data
更新cipher对象。 输入编码 input_encoding
可以是 ‘utf8‘
,‘ascii‘
或 ‘binary‘
。默认为 ‘binary‘
。
输出编码 output_encoding
编码输出数据,可以是 ‘binary‘
, ‘base64‘
或‘hex‘
。默认为 ‘binary‘
。
返回加密过的内容,这个方法可以多次调用(有新数据到达就可以调用)。
cipher.final([output_encoding])#
返回所有剩余加密过的内容,输出编码output_encoding
可以是:‘binary‘
, ‘base64‘
或‘hex‘
。默认为‘binary‘
。
注意:cipher
对象在final()
方法调用后不能再使用。
crypto.createDecipher(algorithm, password)#
根据给定的算法和密码,创建并返解密对象。这个方法是上述createCipher()方法的镜像。
crypto.createDecipheriv(algorithm, key, iv)#
根据给定的算法、密钥(key)和iv,创建并返回解密对象。这个方法是上createCipheriv() 方法的镜像。
Class: Decipher#
解密数据的类。
通过 crypto.createDecipher
和 crypto.createDecipheriv
返回。
decipher.update(data, [input_encoding], [output_encoding])#
使用 data
更新decipher对象。 输入编码 input_encoding
可以是 ‘utf8‘
,‘ascii‘
或 ‘binary‘
。默认为 ‘binary‘
。
输出编码 output_encoding
编码输出数据,可以是 ‘binary‘
, ‘base64‘
或‘hex‘
。默认为 ‘binary‘
。
decipher.final([output_encoding])#
返回所有剩余加密过的内容,输出编码output_encoding
可以是:‘binary‘
, ‘base64‘
或‘hex‘
。默认为‘binary‘
。
注意:cipher
对象在final()
方法调用后不能再使用。
crypto.createSign(algorithm)#
根据给定的算法,创建并返回一个签名对象。在最近的发布中, openssl list-message-digest-algorithms
会列出可用的摘要加密算法。例如: ‘RSA-SHA256‘
。
Class: Signer#
生成签名的类。
通过 crypto.createSign
返回。
signer.update(data)#
以data数据更新签名对象。这个方法可以多次调用(有新数据到达就可以调用)。
signer.sign(private_key, [output_format])#
通过更新后的数据计算签名。private_key
是一个用于签名的PEM编码的私钥。
输出的签名编码 output_format
可以是 ‘binary‘
, ‘hex‘
或 ‘base64‘
。默认为‘binary‘
。
注意:signer
对象在调用了sign方法后不能再使用。
crypto.createVerify(algorithm)#
根据给定的算法,创建并返回校验对象。这是签名方法的镜像。
Class: Verify#
校验签名的类。
通过 crypto.createVerify
返回。
verifier.update(data)#
以data数据更新校验对象。这个方法可以多次调用(有新数据到达就可以调用)。
verifier.verify(object, signature, [signature_format])#
使用 object
和 signature
校验签名。 object
是一个包含PEM编码的字符串,可以是RSA的公钥,DSA公钥或 X.509证书。 signature
之前通过data数据计算出来的签名, signature_format
可以是 ‘binary‘
, ‘hex‘
或 ‘base64‘
。默认为 ‘binary‘
。
返回值的真假取决于数据的签名和公钥的有效性。
注意:verifier
对象在调用 verify()
方法后不能再使用。
crypto.createDiffieHellman(prime_length)#
创建一个Diffie-Hellman密钥交换对象,并生成一个给定的位长度的prime。常用 2
。
crypto.createDiffieHellman(prime, [encoding])#
使用一个给定的prime,创建一个Diffie-Hellman密钥交换对象。常用 2
。编码可以是 ‘binary‘
, ‘hex‘
或 ‘base64‘
。默认为 ‘binary‘
。
Class: DiffieHellman#
创建Diffie-Hellman密钥交换对象的类。
通过 crypto.createDiffieHellman
返回。
diffieHellman.generateKeys([encoding])#
生成私有或公有的Diffie-Hellman密钥,返回给定编码的公钥。这个密钥会转换为其他部分。编码可以是 ‘binary‘
, ‘hex‘
或 ‘base64‘
。默认为 ‘binary‘
。
diffieHellman.computeSecret(other_public_key, [input_encoding], [output_encoding])#
使用 other_public_key
为公钥,计算共享密钥,返回密钥。 other_public_key
以 input_encoding
编码, 输出的密钥以output_encoding
编码。 编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。输入编码默认为‘binary‘
。如果输出编码没有指定,则默认使用输入编码作为输出编码。
diffieHellman.getPrime([encoding])#
以encoding编码格式返回Diffie-Hellman的prime。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
diffieHellman.getGenerator([encoding])#
以encoding编码格式返回Diffie-Hellman的prime。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
diffieHellman.getPublicKey([encoding])#
以encoding编码格式返回Diffie-Hellman的公钥。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
diffieHellman.getPrivateKey([encoding])#
以encoding编码格式返回Diffie-Hellman的私钥。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
diffieHellman.setPublicKey(public_key, [encoding])#
以encoding编码格式设置Diffie-Hellman的公钥。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
diffieHellman.setPrivateKey(public_key, [encoding])#
以encoding编码格式设置Diffie-Hellman的私钥。编码可以是 ‘binary‘
, ‘hex‘
, 或 ‘base64‘
。默认为‘binary‘
。
crypto.pbkdf2(password, salt, iterations, keylen, callback)#
异步的PBKDF2提供HMAC-SHA1伪函数,从而从给定的password,salt,iterations派生出密钥(key)。回调函数有 (err, derivedKey)
两个参数。
crypto.randomBytes(size, [callback])#
生成伪随机强加密数据。使用方式:
// async
crypto.randomBytes(256, function(ex, buf) {
if (ex) throw ex;
console.log(‘Have %d bytes of random data: %s‘, buf.length, buf);
});
// sync
try {
var buf = crypto.randomBytes(256);
console.log(‘Have %d bytes of random data: %s‘, buf.length, buf);
} catch (ex) {
// handle error
}