NodeJS的crypto加密解密中文参考档

Nodejs cyanprobe 8年前 (2016-02-26) 8419次浏览 已收录 3个评论

NodeJS的crypto加密解密中文参考档

前言:

在解决用户邮件验证的时候,需要规则加密解密方法,所以摘抄了《nodejscrypto》中文文档作为加密模块的参考,非本人原创。crypto模块是nodejs的核心加密模块。node利用 OpenSSL库来实现它的加密技术,这是因为OpenSSL已经是一个广泛被采用的加密算法。它包括了类似MD5 or SHA-1 算法。

加密Crypto#

使用require('crypto') 可以访问该模块。
加密模块要求底层系统的OpenSSL是支持的。它提供了一个安全证书,作为一个安全的HTTPS net或HTTP连接的一部分要用于封装方式。
它还提供了一套OpenSSL的哈希,HMAC,加密,解密,签名和验证方法的包装。

crypto.createCredentials(details)#

创建一个认证对象,detail是可选的钥(key)字典的参数。

如果没有具体的 ‘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(256function(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 
}

CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:NodeJS的crypto加密解密中文参考档
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 全是英文 看得吃力
    米粒博客2016-02-27 20:03 回复
    • cyanprobe
      这是翻译过来的鸟,我看了也不会整,最后去stack overflow抄了一段,今天发出来66
      凶恶的方块2016-03-05 22:58 回复
  2. 看一看来瞧一瞧,这个博客真是好!
    益群网2016-02-28 17:19 回复