标签:out ica ogr ever 数据传递 default 公钥 exchange ons
使用 require(‘crypto‘)
来调用该模块。
crypto模块提供在HTTPS或HTTP连接中封装安全凭证的方法。
它提供OpenSSL中的一系列哈希方法,包含hmac、cipher、decipher、签名和验证等方法的封装。
演示样例:
var ciphers = crypto.getCiphers();
console.log(ciphers); // [‘AES-128-CBC‘, ‘AES-128-CBC-HMAC-SHA1‘, ...]
演示样例:
var hashes = crypto.getHashes();
console.log(hashes); // [‘sha‘, ‘sha1‘, ‘sha1WithRSAEncryption‘, ...]
pfx
: 一个字符串或者buffer对象,代表经PFX或者PKCS12编码产生的私钥、证书以及CA证书key
: 一个字符串,代表经PEM编码产生的私钥passphrase
: 私钥或者pfx的passwordcert
: 一个字符串,代表经PEM编码产生的证书ca
: 一个字符串或者字符串数组,表示可信任的经PEM编码产生的CA证书列表crl
: 一个字符串或者字符串数组,表示经PEM编码产生的CRL(证书吊销列表 Certificate Revocation List)ciphers
: 一个字符串。表示须要使用或者排除的加密算法 能够在http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT 查看很多其它关于加密算法格式的资料。ca
,node.js会使用http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt提供的公共可信任的CA列表。
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);
});
它是一个既可读又可写的流。所写入的数据会被用作计算哈希。
当流的可写端终止后,使用 read()
方法来获取计算得的哈希摘要。
同一时候也支持旧有的 update
和 digest
方法。
通过 crypto.createHash
返回。
input_encoding
指定编码为‘utf8‘
、‘ascii‘
或者 ‘binary‘
。假设没有指定编码。将作为二进制数据(buffer)处理。
由于它是流式数据。所以能够使用不同的数据调用非常多次。
encoding
能够是‘hex‘
、‘binary‘
或者‘base64‘
,假设没有指定,会返回一个buffer对象。注意:hash
对象在 digest()
方法被调用后将不可用。
它是一个既可读又可写的流(stream)。
写入的数据会被用于计算hmac。
写入终止后,能够使用read()
方法获取计算后的摘要值。
之前版本号的update
和digest
方法仍然支持。
algorithm
在OpenSSL支持的算法列表中被抛弃了——见上方createHash部分。
key
是hmac算法用到的密钥。
由crypto.createHmac
返回。
encoding
能够是‘hex‘
、‘binary‘
或者‘base64‘
,假设没有指定。会返回一个buffer对象。注意: hmac
对象在调用digest()
之后就不再可用了。
algorithm
算法是依赖OpenSSL库的,
比如: ‘aes192‘
算法等。
在近期公布的版本号。
运行命令 openssl list-cipher-algorithms
就会显示出全部可用的加密算法。password
是用来派生key和IV的。它必须是一个‘binary‘
2进制格式的字符串或者是一个buffer。
它是一个既可读又可写的流。所写入的数据会被用作计算哈希。
当流的可写端终止后,使用 read()
方法来获取计算得的哈希摘要。同一时候也支持旧有的 update
和 digest
方法。
algorithm
算法和createCipher()
方法的參数同样. key
密钥是一个被算法使用的原始密钥。iv
是一个初始化向量。
key
密钥和iv
向量必须是‘binary‘
2进制格式的字符串或buffers。
这个类由 crypto.createCipher
和 crypto.createCipheriv
返回。
Cipher加密对象是 streams,他是具有 readable 可读和 writable 可写的。
写入的纯文本数据是用来在可读流一側加密数据的。 曾经版本号的update
和final
方法也还是支持的。
data
參数更新cipher加密对象,
它的编码input_encoding
必须是下列给定编码的 ‘utf8‘
, ‘ascii‘
or‘binary‘
中一种。假设没有编码參数,那么打他參数必须是一个buffer。參数 output_encoding
输出编码指定了加密数据的输出格式。能够是‘binary‘
, ‘base64‘
或者‘hex‘
。假设没有提供这个參数。buffer将会返回。
返回加密内容,而且Returns
the enciphered contents, 用新数据作为流的话。它能够被调用多次。
output_encoding
为‘binary‘
, ‘base64‘
或 ‘hex‘
中的随意一个。
假设没有提供编码格式,则返回一个buffer对象。注意:
调用final()
函数后cipher
对象不能被使用。
假设
auto_padding
是false。
那么整个输入数据的长度必须是加密器的块大小的整倍数,否则final
会失败。这对非标准的填充非常实用,比如使用0x0
而不是PKCS的填充。这个函数必须在cipher.final
之前调用。
依据给定的算法和密钥,创建并返回一个解密器对象。
这是上述createCipher()的一个镜像。
依据给定的算法,密钥和初始化向量。创建并返回一个解密器对象。
这是上述createCipheriv()的一个镜像。
由crypto.createDecipher
和crypto.createDecipheriv
返回。
解密器对象是可读写的流对象。
用被写入的加密数据生成可读的平文数据。解码器对象也支持The
legacy update
和 final
函数。
data
来更新解密器,当中data
以‘binary‘
, ‘base64‘
或 ‘hex‘
进行编码。假设没有指明编码方式。则默认data
是一个buffer对象。output_decoding
指明了用下面哪种编码方式返回解密后的平文:‘binary‘
, ‘ascii‘
或 ‘utf8‘
。假设没有指明编码方式,则返回一个buffer对象。
output_encoding
为‘binary‘
, ‘ascii‘
或 ‘utf8‘
中的随意一个。假设没有指明编码方式,则返回一个buffer对象。
注意:
调用final()
函数后不能使用decipher
对象。
decipher.final
对数据进行检查和移除。这仅仅有在输入数据的长度是加密器块大小的整倍数时才有效。这个函数必须在将数据流传递给
decipher.update
之前调用。
openssl
list-public-key-algorithms
会列出可用的签名算法。比如‘RSA-SHA256‘
。
由crypto.createSign
返回。
Sign对象是可写的流对象。被写入的数据用来生成数字签名。当全部的数据都被写入后。sign
函数会返回数字签名。
Sign对象也支持The
legacy update
函数。
data
来更新sign对象。新数据是以流的形式时可调用多次。
private_key
是一个包括了签名私钥的字符串,而该私钥是用PEM编码的。返回一个数字签名。该签名的格式能够是‘binary‘
, ‘hex‘
或 ‘base64‘
.
假设没有指明编码方式,则返回一个buffer对象。
注意:调用sign()
后不能使用sign
对象。
由 crypto.createVerify
返回。
验证器对象是可写的流对象.
被写入的数据会被用来验证提供的数字签名。在全部的数据被写入后。假设提供的数字签名有效,verify
函数会返回真。验证器对象也支持
The legacy update
函数。
object
和signature
来验证被签名的数据。 object
是一个字符串,这个字符串包括了一个被PEM编码的对象。这个对象能够是RSA公钥,DSA公钥或者X.509
证书。 signature
是之前计算出来的数字签名,当中的signature_format
能够是‘binary‘
, ‘hex‘
或 ‘base64‘
.
假设没有指明编码方式,那么默认是一个buffer对象。依据数字签名对于数据和公钥的有效性。返回true或false。
注意:
调用verify()
函数后不能使用verifier
对象。
创建一个迪菲-赫尔曼密钥交换(Diffie-Hellman key exchange)对象,并依据给定的位长度生成一个质数。所用的生成器是2。
所用的生成器是
2
。编码方式能够是‘binary‘
, ‘hex‘
或 ‘base64‘
。假设没有指明编码方式,则默认是一个buffer对象。
由crypto.createDiffieHellman
返回。
‘binary‘
, ‘hex‘
或 ‘base64‘
.
假设没有指明编码方式,则返回一个buffer对象。
other_public_key
作为第三方公钥来计算共享秘密,并返回这个共享秘密。參数中的密钥会以
input_encoding
编码方式来解读。而共享密钥则会用output_encoding
进行编码。编码方式能够是
‘binary‘
,‘hex‘
或 ‘base64‘
。假设没有提供输入的编码方式,则默觉得一个buffer对象。
假设没有指明输出的编码方式。则返回一个buffer对象。
‘binary‘
, ‘hex‘
或‘base64‘
。假设没有指明编码方式。则返回一个buffer对象。
‘binary‘
, ‘hex‘
或‘base64‘
。假设没有指明编码方式,则返回一个buffer对象。
‘binary‘
, ‘hex‘
或‘base64‘
。假设没有指明编码方式。则返回一个buffer对象。
‘binary‘
, ‘hex‘
或‘base64‘
。假设没有指明编码方式。则返回一个buffer对象。
‘binary‘
, ‘hex‘
或 ‘base64‘
。假设没有指明编码方式,则返回一个buffer对象。
‘binary‘
, ‘hex‘
或 ‘base64‘
。假设没有指明编码方式,则返回一个buffer对象。
支持下面的D-H组:
‘modp1‘
,‘modp2‘
, ‘modp5‘
(在RFC
2412中定义) 和 ‘modp14‘
, ‘modp15‘
, ‘modp16‘
, ‘modp17‘
, ‘modp18‘
(在 RFC
3526中定义)。返回的对象模仿了上述
crypto.createDiffieHellman()方法所创建的对象的接口,但不会晕同意密钥交换 (比如像 diffieHellman.setPublicKey()那样)。运行这套流程的优点是两方不须要事先生成或交换组余数,节省了处理和通信时间。演示样例(获取一个共享秘密):
var crypto = require(‘crypto‘);
var alice = crypto.getDiffieHellman(‘modp5‘);
var bob = crypto.getDiffieHellman(‘modp5‘);
alice.generateKeys();
bob.generateKeys();
var alice_secret = alice.computeSecret(bob.getPublicKey(), null, ‘hex‘);
var bob_secret = bob.computeSecret(alice.getPublicKey(), null, ‘hex‘);
/* alice_secret and bob_secret should be the same */
console.log(alice_secret == bob_secret);
(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
// most likely, entropy sources are drained
}
注意:将抛出错误或调用回调有错误,假设没有足够的积累了熵产生强加密的数据。换句话说。crypto.randombytes没有回调不会阻止即使全部的熵源排放。
使用方法与 crypto.randomBytes
一模一样。
‘buffer‘
,所以默认使用Buffer对象。这是为了让crypto模块与默认
‘binary‘
为编码方式的遗留程序更easy兼容。要注意。新的程序会期待buffer对象,所以使用这个时请仅仅作为临时的手段。
由于这样,与流有关的类中并没有其他Node类的典型函数,并且非常多函数接受和返回默认的二进制编码的字符串,而不是Buffer对象。
在近期的改动中。这些函数都被改成默认使用Buffer对象。
这对于某些(但不是所有)使用场景来讲是重大的改变。
比如。假设你如今使用Sign类的默认參数,然后在没有检查数据的情况下,将结果传递给Verify类,那么程序会照常工作。
在曾经,你会拿到一个二进制字符串。然后它传递给Verify对象;而如今,你会得到一个Buffer对象,然后把它传递给Verify对象。
可是。假设你曾经是使用那些在Buffer对象上不能正常工作的字符串数据,或者以默认编码方式将二进制数据传递给加密函数的话。那你就要開始提供编码方式參数来指明你想使用的编码方式了。假设想准换回旧的风格默认使用二进制字符串。那么你须要把crypto.DEFAULT_ENCODING
字段设为‘binary‘。但请注意,由于新的程序非常可能会期望buffer对象,所以仅将此当做暂时手段。
标签:out ica ogr ever 数据传递 default 公钥 exchange ons
原文地址:http://www.cnblogs.com/ljbguanli/p/7260016.html