加密Crypto#
使用require(‘crypto‘) 可以访问该模块。
加密模块要求底层系统的OpenSSL是支持的。它提供了一个安全证书,作为一个安全的HTTPS net或HTTP连接的一部分要用于封装方式。
它还提供了一套OpenSSL的哈希,HMAC,加密,解密,签名和验证方法的包装。
创建一个认证对象,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.
创建并返回一个加密哈希对象,一个给定的算法,可用于生成哈希摘要。
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);
});
创建数据的hash摘要的类。
通过 crypto.createHash返回。
用给定的数据 data 更新hash摘要。 input_encoding 参数允许的编码为‘utf8‘, ‘ascii‘ 或 ‘binary‘。默认为‘binary‘。这个方法可以多次调用(有新数据到达就可以调用) 。
计算已接收到数据的hash摘要。编码 encoding 可以是 ‘hex‘, ‘binary‘ 或 ‘base64‘。默认为 ‘binary‘.
注意: hash 对象在调用过 digest() 方法后不能在使用。
创建并返回hmac对象,一个根据给定算法和密钥加密过的hmac。
algorithm 参数依赖于平台OpenSSL支持的可用算法,详见上面的createHash。 key 参数是hmac用到的密钥。
创建加密图形内容的类。
通过 crypto.createHmash返回。
用给定的数据 data 更新hash摘要。这个方法可以多次调用(有新数据到达就可以调用)。
计算已接收到数据的 hmac 摘要。编码 encoding 可以是 ‘hex‘, ‘binary‘ 或 ‘base64‘。默认为 ‘binary‘.
注意: hmac 对象在调用过 digest() 方法后不能在使用。
根据给定的算法和密码,创建并返回加密对象。
algorithm 依赖于OpenSSL,例如:‘aes192‘,等等。 在最近的发布中, openssl list-message-digest-algorithms 会列出可用的摘要加密算法。 password 用于派生密钥(key)和IV,必须是二进制 ‘binary‘ 编码字符串。(详见Buffer section )。
根据给定的算法、密钥(key)和iv,创建并返回加密对象。
algorithm 和 createCipher()中的是一样的。 key 是在算法中使用的原密钥。 iv 是一个初始化的向量。 key 和iv 必须是二进制 ‘binary‘ 编码的字符串 (详见Buffer section )。
加密数据的类。
通过 crypto.createCipher 和 crypto.createCipheriv返回。
使用 data更新cipher对象。 输入编码 input_encoding 可以是 ‘utf8‘,‘ascii‘ 或 ‘binary‘。默认为 ‘binary‘。
输出编码 output_encoding 编码输出数据,可以是 ‘binary‘, ‘base64‘ 或‘hex‘。默认为 ‘binary‘。
返回加密过的内容,这个方法可以多次调用(有新数据到达就可以调用)。
返回所有剩余加密过的内容,输出编码output_encoding 可以是:‘binary‘, ‘base64‘ 或‘hex‘。默认为‘binary‘。
注意:cipher 对象在final() 方法调用后不能再使用。
根据给定的算法和密码,创建并返解密对象。这个方法是上述createCipher()方法的镜像。
根据给定的算法、密钥(key)和iv,创建并返回解密对象。这个方法是上createCipheriv() 方法的镜像。
解密数据的类。
通过 crypto.createDecipher 和 crypto.createDecipheriv返回。
使用 data更新decipher对象。 输入编码 input_encoding 可以是 ‘utf8‘,‘ascii‘ 或 ‘binary‘。默认为 ‘binary‘。
输出编码 output_encoding 编码输出数据,可以是 ‘binary‘, ‘base64‘ 或‘hex‘。默认为 ‘binary‘。
返回所有剩余加密过的内容,输出编码output_encoding 可以是:‘binary‘, ‘base64‘ 或‘hex‘。默认为‘binary‘。
注意:cipher 对象在final() 方法调用后不能再使用。
根据给定的算法,创建并返回一个签名对象。在最近的发布中, openssl list-message-digest-algorithms 会列出可用的摘要加密算法。例如: ‘RSA-SHA256‘。
生成签名的类。
通过 crypto.createSign返回。
以data数据更新签名对象。这个方法可以多次调用(有新数据到达就可以调用)。
通过更新后的数据计算签名。private_key 是一个用于签名的PEM编码的私钥。
输出的签名编码 output_format 可以是 ‘binary‘, ‘hex‘ 或 ‘base64‘。默认为‘binary‘。
注意:signer 对象在调用了sign方法后不能再使用。
根据给定的算法,创建并返回校验对象。这是签名方法的镜像。
校验签名的类。
通过 crypto.createVerify返回。
以data数据更新校验对象。这个方法可以多次调用(有新数据到达就可以调用)。
使用 object 和 signature校验签名。 object 是一个包含PEM编码的字符串,可以是RSA的公钥,DSA公钥或 X.509证书。 signature 之前通过data数据计算出来的签名, signature_format 可以是 ‘binary‘, ‘hex‘ 或 ‘base64‘。默认为 ‘binary‘。
返回值的真假取决于数据的签名和公钥的有效性。
注意:verifier 对象在调用 verify() 方法后不能再使用。
创建一个Diffie-Hellman密钥交换对象,并生成一个给定的位长度的prime。常用 2。
使用一个给定的prime,创建一个Diffie-Hellman密钥交换对象。常用 2。编码可以是 ‘binary‘, ‘hex‘或 ‘base64‘ 。默认为 ‘binary‘。
创建Diffie-Hellman密钥交换对象的类。
通过 crypto.createDiffieHellman返回。
生成私有或公有的Diffie-Hellman密钥,返回给定编码的公钥。这个密钥会转换为其他部分。编码可以是 ‘binary‘, ‘hex‘或 ‘base64‘。默认为 ‘binary‘。
使用 other_public_key 为公钥,计算共享密钥,返回密钥。 other_public_key 以 input_encoding 编码, 输出的密钥以output_encoding编码。 编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。输入编码默认为‘binary‘。如果输出编码没有指定,则默认使用输入编码作为输出编码。
以encoding编码格式返回Diffie-Hellman的prime。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
以encoding编码格式返回Diffie-Hellman的prime。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
以encoding编码格式返回Diffie-Hellman的公钥。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
以encoding编码格式返回Diffie-Hellman的私钥。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
以encoding编码格式设置Diffie-Hellman的公钥。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
以encoding编码格式设置Diffie-Hellman的私钥。编码可以是 ‘binary‘, ‘hex‘, 或 ‘base64‘。默认为‘binary‘。
异步的PBKDF2提供HMAC-SHA1伪函数,从而从给定的password,salt,iterations派生出密钥(key)。回调函数有 (err, derivedKey)两个参数。
生成伪随机强加密数据。使用方式:
// 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
}
原文:http://my.oschina.net/chinacaptain/blog/304772