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(+ ' ' + 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 
}

你可能感兴趣的:(crypto加密解密)