使用require('crypto')
來(lái)獲取這個(gè)模塊。
crypto
模塊提供了一種封裝安全證書(shū)的方法,用來(lái)作為安全HTTPS網(wǎng)絡(luò)和HTTP鏈接的一部分。
它也提供了一個(gè)OpenSSL hash
,hamc
,cipher
,decipher
,sign
和vierify
方法的包裝集合。
加載和設(shè)置 一些/所有 OpenSSL功能引擎(由標(biāo)記選擇)。
引擎可以通過(guò)id或 引擎共享庫(kù)的路徑 來(lái)選擇。
flags
是可選的,并且有一個(gè)ENGINE_METHOD_ALL
默認(rèn)值。可以選一個(gè)或多個(gè)以下的標(biāo)記(在常量模塊中定義)。
返回一個(gè)支持的加密算法的名字?jǐn)?shù)組。
例子:
var ciphers = crypto.getCiphers();
console.log(ciphers); // ['aes-128-cbc', 'aes-128-ccm', ...]
返回一個(gè)支持的哈希算法的名字?jǐn)?shù)組。
例子:
var hashes = crypto.getHashes();
console.log(hashes); // ['sha', 'sha1', 'sha1WithRSAEncryption', ...]
返回一個(gè)支持的橢圓加密算法的名字?jǐn)?shù)組。
例子:
var curves = crypto.getCurves();
console.log(curves); // ['secp256k1', 'secp384r1', ...]
穩(wěn)定度: 0 - 棄用。使用
tls.createSecureContext
代替。
創(chuàng)建一個(gè)加密憑證對(duì)象,接受一個(gè)可選的帶鍵字典details
:
PFX
或PKCS12
加密的私鑰,加密憑證和CA證書(shū)的字符串或buffer
。PEM
加密私鑰的字符串。pfx
密碼字符串。PEM
加密憑證的字符串。PEM
加密CA證書(shū)的字符串或字符串列表。PEM
加密CRL
的字符串或字符串列表。http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT
如果沒(méi)有指定ca
,那么io.js
將會(huì)使用http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt.
提供的默認(rèn)公共可信任CA
列表。
創(chuàng)建并返回一個(gè)哈希對(duì)象,一個(gè)指定算法的加密哈希用來(lái)生成哈希摘要。
algorithm
依賴于平臺(tái)上的OpenSSL版本所支持的算法。例如'sha1'
,'md5'
,'sha256'
,'sha512'
等等。openssl list-message-digest-algorithms
命令會(huì)展示可用的摘要算法。
例子:這個(gè)程序計(jì)算出一個(gè)文件的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);
});
這個(gè)類用來(lái)創(chuàng)建數(shù)據(jù)哈希摘要。
這是一個(gè)同時(shí)可讀與可寫(xiě)的流。寫(xiě)入的數(shù)據(jù)用來(lái)計(jì)算哈希。一旦當(dāng)流的可寫(xiě)端終止,使用read()
來(lái)獲取計(jì)算所得哈希摘要。遺留的update
和digest
方法同樣被支持。
通過(guò)crypto.createHash
返回。
使用給定的data
更新哈希內(nèi)容,通過(guò)input_encoding
指定的編碼可以是'utf8'
,'ascii'
或'binary'
。如果沒(méi)有提供編碼,并且輸入是一個(gè)字符串,那么將會(huì)指定編碼為'binary'
。如果data
是一個(gè)Buffer
那么input_encoding
會(huì)被忽略。
它是流式數(shù)據(jù),所以這個(gè)方法可以被調(diào)用多次。
計(jì)算所有的被傳遞的數(shù)據(jù)的摘要。encoding
可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
被返回。
注意:當(dāng)調(diào)用了digest()
方法之后,哈希對(duì)象不能再被使用了。
創(chuàng)建并返回一個(gè)hmac對(duì)象,即通過(guò)給定的算法和密鑰生成的加密圖譜(cryptographic)。
這是一個(gè)既可讀又可寫(xiě)的流。寫(xiě)入的數(shù)據(jù)被用來(lái)計(jì)算hamc。一旦當(dāng)流的可寫(xiě)端終止,使用read()
方法來(lái)獲取計(jì)算所得摘要值。遺留的update
和digest
方法同樣被支持。
algorithm
依賴于平臺(tái)上的OpenSSL版本所支持的算法。參閱上文createHash
。key
是要使用的hmac密鑰。
用于創(chuàng)建hmac加密圖譜(cryptographic)的類。
通過(guò)crypto.createHmac
返回。
只用指定的data
更新hmac內(nèi)容。因?yàn)樗橇魇綌?shù)據(jù),所以這個(gè)方法可以被調(diào)用多次。
計(jì)算所有的被傳遞的數(shù)據(jù)的hmac摘要。encoding
可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
被返回。
注意:當(dāng)調(diào)用了digest()
方法之后,hmac對(duì)象不能再被使用了。
創(chuàng)建和返回一個(gè)cipher
對(duì)象,指定指定的算法和密碼。
算法依賴于OpenSSL,如果'aes192'
,等等。在最近的發(fā)行版中,openssl list-cipher-algorithms
命令會(huì)展示可用的cipher
算法。密碼被用來(lái)獲取密鑰和IV,必須是一個(gè)'binary'
編碼的字符串或buffer
。
這是一個(gè)既可讀又可寫(xiě)的流。寫(xiě)入的數(shù)據(jù)被用來(lái)計(jì)算哈希。一旦當(dāng)流的可寫(xiě)端終止,使用read()
方法來(lái)獲取通過(guò)cipher
計(jì)算所得的內(nèi)容。遺留的update
和digest
方法同樣被支持。
注意:createCipher
通過(guò) 無(wú)鹽MD5
一次迭代所得的摘要 來(lái)調(diào)用 OpenSSL函數(shù)
EVP_BytesToKey` 來(lái)派生密鑰。無(wú)鹽意味允許字典攻擊,即同樣的密碼經(jīng)??梢杂脕?lái)創(chuàng)建同樣的密鑰。一次迭代并且無(wú)加密圖譜安全(non-cryptographically secure)以為著允許密碼被快速測(cè)試。
OpenSSL建議使用pbkdf2
替代EVP_BytesToKey
,推薦你通過(guò)crypto.pbkdf2
然后調(diào)用createCipheriv()
創(chuàng)建一個(gè)cipher
流來(lái)派生一個(gè)密鑰和iv。
創(chuàng)建和返回一個(gè)cipher
對(duì)象,指定指定的算法,密鑰和iv。
algorithm
參數(shù)與createCipher()
相同。key
是被算法使用的源密鑰(raw key)。iv是初始化矢量(initialization vector)。
key
和iv
必須是'binary'
編碼的字符串或buffer
。
創(chuàng)建一個(gè)加密數(shù)據(jù)。
由crypto.createCipher
和crypto.createCipheriv
返回。
這是一個(gè)既可讀又可寫(xiě)的流。寫(xiě)入的文本數(shù)據(jù)被用來(lái)在可讀端生產(chǎn)被加密的數(shù)據(jù)。遺留的update
和final
方法同樣被支持。
通過(guò)data
更新cipher
,input_encoding
中指定的編碼可以是'utf8'
,'ascii'
或'binary'
。如果沒(méi)有提供編碼,那么希望接受到一個(gè)buffer
。如果數(shù)據(jù)是一個(gè)Buffer
,那么input_encoding
將被忽略。
output_encoding
指定了加密數(shù)據(jù)的輸出格式,可以是'binary'
,'base64'
或'hex'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
會(huì)被返回。
返回一個(gè)加密內(nèi)容,并且因?yàn)樗橇魇綌?shù)據(jù),所以可以被調(diào)用多次。
返回所有的剩余的加密內(nèi)容,output_encoding
可以是'binary'
,'base64'
或'hex'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
會(huì)被返回。
注意:當(dāng)調(diào)用了final()
方法之后,cipher對(duì)象不能再被使用了。
你可以禁用自動(dòng)填充輸入數(shù)據(jù)至塊大小。如果auto_padding
為false
,那么整個(gè)輸入數(shù)據(jù)的長(zhǎng)度必須cipher
的塊大小的整數(shù)倍,否則會(huì)失敗。這對(duì)非標(biāo)準(zhǔn)填充非常有用,如使用0x0替代PKCS填充。你必須在cipher.final
之前調(diào)用它。
對(duì)于已認(rèn)證加密模式(當(dāng)前支持:GCM),這個(gè)方法返回一個(gè)從給定數(shù)據(jù)計(jì)算所得的代表了認(rèn)證標(biāo)簽的Buffer
。必須在final
方法被調(diào)用后調(diào)用。
對(duì)于已認(rèn)證加密模式(當(dāng)前支持:GCM),這個(gè)方法設(shè)置被用于額外已認(rèn)證數(shù)據(jù)(AAD)輸入?yún)?shù)的值。
使用給定算法和密鑰,創(chuàng)建并返回一個(gè)解密器對(duì)象。這是上文createCipher()
的一個(gè)鏡像。
使用給定算法,密鑰和iv,創(chuàng)建并返回一個(gè)解密器對(duì)象。這是上文createCipheriv()
的一個(gè)鏡像。
解密數(shù)據(jù)類。
通過(guò)crypto.createDecipher
和crypto.createDecipheriv
返回。
這是一個(gè)既可讀又可寫(xiě)的流。寫(xiě)入的被加密的數(shù)據(jù)被用來(lái)在可讀端生產(chǎn)文本數(shù)據(jù)。遺留的update
和final
方法同樣被支持。
通過(guò)data
更新decipher
,編碼可以是'binary'
,'base64'
或'hex'
。如果沒(méi)有提供編碼,那么希望接受到一個(gè)buffer
。如果數(shù)據(jù)是一個(gè)Buffer
,那么input_encoding
將被忽略。
output_encoding
指定了解密數(shù)據(jù)的輸出格式,可以是'binary'
,'ascii'
或'utf8'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
會(huì)被返回。
返回所有的剩余的文本數(shù)據(jù),output_encoding
可以是'binary'
,'ascii'
或'utf8'
。如果沒(méi)有指定編碼,那么一個(gè)buffer
會(huì)被返回。
注意:當(dāng)調(diào)用了final()
方法之后,decipher對(duì)象不能再被使用了。
如數(shù)據(jù)沒(méi)有使用標(biāo)準(zhǔn)塊填充阻止decipher.final
檢查和刪除它來(lái)加密,你可以禁用自動(dòng)填充。那么整個(gè)輸入數(shù)據(jù)的長(zhǎng)度必須cipher
的塊大小的整數(shù)倍,否則會(huì)失敗。你必須在將數(shù)據(jù)導(dǎo)流至decipher.update
前調(diào)用它。
對(duì)于已認(rèn)證加密模式(當(dāng)前支持:GCM),這個(gè)方法必須被傳遞,用來(lái)接受認(rèn)證標(biāo)簽。如果沒(méi)有提供標(biāo)簽或密文被干擾,最終會(huì)拋出一個(gè)錯(cuò)誤。
對(duì)于已認(rèn)證加密模式(當(dāng)前支持:GCM),這個(gè)方法設(shè)置被用于額外已認(rèn)證數(shù)據(jù)(AAD)輸入?yún)?shù)的值。
使用指定的算法,創(chuàng)建并返回一個(gè)數(shù)字簽名類。在最近的OpenSSL發(fā)行版中,openssl list-public-key-algorithms
會(huì)列出所有支持的數(shù)字簽名算法。例如'RSA-SHA256'
。
用于生成數(shù)字簽名的類。
通過(guò)crypto.createSign
返回。
Sign
對(duì)象是一個(gè)可寫(xiě)流。寫(xiě)入的數(shù)據(jù)用來(lái)生成數(shù)字簽名。一旦所有的數(shù)據(jù)被寫(xiě)入,sign
方法會(huì)返回一個(gè)數(shù)字簽名。遺留的update
方法也支持。
使用data
更新sign
對(duì)象。因?yàn)樗橇魇降乃赃@個(gè)方法可以被調(diào)用多次。
根據(jù)所有通過(guò)update
方法傳入的數(shù)據(jù)計(jì)算數(shù)字簽名。
private_key
可以是一個(gè)對(duì)象或一個(gè)字符串,如果private_key
是一個(gè)字符串,那么它被當(dāng)做沒(méi)有密碼的密鑰。
private_key:
PEM
編碼私鑰的字符串。返回的數(shù)字簽名編碼由output_format
決定,可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有指定編碼,會(huì)返回一個(gè)buffer
。
注意,在調(diào)用了sign()
后,sign
對(duì)象不能再使用了。
使用給定的算法,創(chuàng)建并返回一個(gè)驗(yàn)證器對(duì)象。這個(gè)對(duì)象是sign
對(duì)象的鏡像。
用來(lái)驗(yàn)證數(shù)字簽名的類。
由crypto.createVerify
返回。
Verify
對(duì)象是一個(gè)可寫(xiě)流。寫(xiě)入的數(shù)據(jù)用來(lái)驗(yàn)證提供的數(shù)字簽名。一旦所有的數(shù)據(jù)被寫(xiě)入,verify
方法會(huì)返回true
如果提供的數(shù)字簽名有效。遺留的update
方法也支持。
使用data
更新verifier
對(duì)象。因?yàn)樗橇魇降乃赃@個(gè)方法可以被調(diào)用多次。
通過(guò)使用object
和signature
驗(yàn)證被簽名的數(shù)據(jù)。object
是一個(gè)包含了PEM編碼對(duì)象的字符串,這個(gè)對(duì)象可以是RSA公鑰,DSA公鑰或X.509證書(shū)。signature
是先前計(jì)算出來(lái)的數(shù)字簽名,signature_format
可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有指定編碼,那么希望收到一個(gè)buffer
。
返回值是true
或false
根據(jù)數(shù)字簽名對(duì)于數(shù)據(jù)和公鑰的有效性。
注意,在調(diào)用了verify()
后,verifier
對(duì)象不能再使用了。
創(chuàng)建一個(gè)迪菲-赫爾曼密鑰交換對(duì)象(Diffie-Hellman key exchange object),并且根據(jù)prime_length
生成一個(gè)質(zhì)數(shù),可以指定一個(gè)可選的數(shù)字生成器。如果沒(méi)有指定生成器,將使用2
。
通過(guò)給定的質(zhì)數(shù),和可選的生成器,創(chuàng)建一個(gè)迪菲-赫爾曼密鑰交換對(duì)象(Diffie-Hellman key exchange object)。generator
可以是一個(gè)數(shù)字,字符串或Buffer
。如果沒(méi)有指定生成器,將使用2
。prime_encoding
和generator_encoding
可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有指定prime_encoding
,那么希望prime
是一個(gè)Buffer
。如果沒(méi)有指定generator_encoding
,那么希望generator
是一個(gè)Buffer
。
叫來(lái)創(chuàng)建迪菲-赫爾曼密鑰交換的類。
通過(guò)crypto.createDiffieHellman
返回。
一個(gè)包含了所有警告和/或錯(cuò)誤的位域,作為檢查初始化時(shí)的執(zhí)行結(jié)果。以下是這個(gè)屬性的合法屬性(被常量模塊定義):
生成一個(gè) 私和公 迪菲-赫爾曼 密鑰值,并且返回一個(gè)指定編碼的公鑰。這個(gè)密鑰可以被轉(zhuǎn)移給第三方。編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
使用other_public_key
作為第三方密鑰來(lái)計(jì)算共享秘密(shared secret),并且返回計(jì)算結(jié)果。提供的密鑰會(huì)以input_encoding
來(lái)解讀,并且秘密以output_encoding
來(lái)編碼。編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
如果沒(méi)有指定output_encoding
,那么會(huì)返回一個(gè)buffer
。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼質(zhì)數(shù),編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼生成器,編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼公鑰,編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼私鑰,編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
設(shè)置迪菲-赫爾曼公鑰,密鑰編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么期望接收一個(gè)buffer
。
設(shè)置迪菲-赫爾曼私鑰,密鑰編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么期望接收一個(gè)buffer
。
創(chuàng)建一個(gè)預(yù)定義的迪菲-赫爾曼密鑰交換對(duì)象。支持的群組有:'modp1', 'modp2', 'modp5' (由RFC 2412定義) 和 'modp14', 'modp15', 'modp16', 'modp17', 'modp18' (由RFC 3526定義)。返回的對(duì)象模仿crypto.createDiffieHellman()
創(chuàng)建的對(duì)象的借口,但是不允許交換密鑰(如通過(guò)diffieHellman.setPublicKey()
)。執(zhí)行這套流程的好處是雙方不需要事先生成或交換組余數(shù),節(jié)省了處理和通信時(shí)間。
例子(獲取一個(gè)共享秘密):
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);
使用由curve_name
指定的預(yù)定義橢圓,創(chuàng)建一個(gè)橢圓曲線(EC)迪菲-赫爾曼密鑰交換對(duì)象。使用getCurves()
來(lái)獲取可用的橢圓名列表。在最近的發(fā)行版中,openssl ecparam -list_curves
命令也會(huì)展示可用的橢圓曲線的名字和簡(jiǎn)述。
用于EC迪菲-赫爾曼密鑰交換的類。
由crypto.createECDH
返回。
生成一個(gè) 私/公 EC迪菲-赫爾曼密鑰值,并且返回指定格式和編碼的公鑰。這個(gè)密鑰可以被轉(zhuǎn)移給第三方。
format
指定點(diǎn)的編碼,可以是'compressed'
,'uncompressed'
或'hybrid'
。如果沒(méi)有指定,那么點(diǎn)將是'uncompressed'
格式。
編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
使用other_public_key
作為第三方密鑰來(lái)計(jì)算共享秘密(shared secret),并且返回計(jì)算結(jié)果。提供的密鑰會(huì)以input_encoding
來(lái)解讀,并且秘密以output_encoding
來(lái)編碼。編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
如果沒(méi)有指定output_encoding
,那么會(huì)返回一個(gè)buffer
。
返回指定編碼和格式的EC迪菲-赫爾曼公鑰。
format
指定點(diǎn)的編碼,可以是'compressed'
,'uncompressed'
或'hybrid'
。如果沒(méi)有指定,那么點(diǎn)將是'uncompressed'
格式。
編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
返回指定編碼的EC迪菲-赫爾曼私鑰,編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么會(huì)返回一個(gè)buffer
。
設(shè)置EC迪菲-赫爾曼公鑰。密鑰編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么期望接收一個(gè)buffer
。
設(shè)置EC迪菲-赫爾曼私鑰。密鑰編碼可以是'binary'
,'hex'
或'base64'
。如果沒(méi)有提供編碼,那么期望接收一個(gè)buffer
。
例子(獲取一個(gè)共享秘密):
var crypto = require('crypto');
var alice = crypto.createECDH('secp256k1');
var bob = crypto.createECDH('secp256k1');
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);
異步PBKDF2函數(shù)。提供被選擇的HAMC摘要函數(shù)(默認(rèn)為SHA1)來(lái)獲取一個(gè)請(qǐng)求長(zhǎng)度的密碼密鑰,鹽和迭代數(shù)。回調(diào)函數(shù)有兩個(gè)參數(shù):(err
,derivedKey
)。
例子:
crypto.pbkdf2('secret', 'salt', 4096, 512, 'sha256', function(err, key) {
if (err)
throw err;
console.log(key.toString('hex')); // 'c5e478d...1469e50'
});
可用通過(guò)crypto.getHashes()
獲取支持的摘要函數(shù)列表。
同步PBKDF2函數(shù)。返回derivedKey
或拋出錯(cuò)誤。
生成有密碼圖譜一般健壯的偽隨機(jī)數(shù)據(jù),用處:
// 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
}
注意:如果熵不足,那么它會(huì)阻塞。盡管它從不話費(fèi)超過(guò)幾毫秒。唯一可以想到的阻塞是情況是,當(dāng)整個(gè)系統(tǒng)的熵還是很低時(shí),在其之后啟動(dòng)。
這個(gè)類用來(lái)處理已簽名公鑰 & 挑戰(zhàn)(challenges)。最常用的是它的一系列處理<keygen>
元素的函數(shù)。http://www.openssl.org/docs/apps/spkac.html
。
通過(guò)crypto.Certificate
返回。
返回ture
或false
,依賴于SPKAC的有效性。
導(dǎo)出編碼好的公鑰從指定的SPKAC。
導(dǎo)出編碼好的挑戰(zhàn)(challenge)從指定的SPKAC。
使用public_key
加密buffer
。目前只支持RSA。
public_key
可是是一個(gè)對(duì)象或一個(gè)字符串。如果public_key
是一個(gè)字符串,它會(huì)被視作沒(méi)有密碼的密鑰并且將使用RSA_PKCS1_OAEP_PADDING
。因?yàn)?code>RSA公鑰可以用來(lái)從你傳遞給這個(gè)方法的密鑰來(lái)獲取。
public_key:
padding : 一個(gè)可選的填充值,以下值之一:
注意:所有的填充值都被常量模塊所定義。
詳情參閱上文。與crypto.publicEncrypt
有相同API。默認(rèn)填充值是RSA_PKCS1_PADDING
。
使用private_key
解密buffer
。
private_key
可以是一個(gè)對(duì)象或一個(gè)字符串。如果private_key
是一個(gè)字符串,它會(huì)當(dāng)做沒(méi)有密碼的密鑰,并且使用RSA_PKCS1_OAEP_PADDING
。
public_key:
padding : 一個(gè)可選的填充值,以下值之一:
注意:所有的填充值都被常量模塊所定義。
詳情參閱上文。與crypto.privateDecrypt
有相同API。默認(rèn)填充值是RSA_PKCS1_PADDING
。
默認(rèn)編碼是用于接受字符串或buffer
的函數(shù)。默認(rèn)值是'buffer'
,所以默認(rèn)是使用Buffer
對(duì)象的。這被用來(lái)與舊的以'binary'
為默認(rèn)編碼的程序更好地兼容。
注意新的程序仍可能期望使用buffer
,所以只將它作為一個(gè)臨時(shí)措施。
Crypto
模塊在還沒(méi)有統(tǒng)一的流API概念,以及沒(méi)有Buffer
對(duì)象來(lái)處理二進(jìn)制數(shù)據(jù)前就加入了Node.js
。
因?yàn)檫@樣,它的流類沒(méi)有其他io.js
類的典型類,而且很多方法默認(rèn)接受和返回二進(jìn)制字符串而不是Buffer
。這些函數(shù)將被改成默認(rèn)接受和返回Buffer
。
這對(duì)于一些但不是所有的使用場(chǎng)景來(lái)說(shuō)是巨大的改變。
例如,如果你現(xiàn)在對(duì)Sign
類使用默認(rèn)參數(shù),并且傳遞Verify
類的結(jié)果,不檢查數(shù)據(jù),那么在以前它將會(huì)繼續(xù)工作。在你曾經(jīng)得到二進(jìn)制字符串的地方,你將會(huì)得到一個(gè)Buffer
。
但是,如果你正在使用那些使用字符串可以,但使用Buffer
不能工作的數(shù)據(jù)(如連接它們,存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)等)。或者對(duì)crypto
函數(shù)不傳遞編碼參數(shù)來(lái)傳遞二進(jìn)制字符串。那么以后,你需要提供你想要指定的編碼。如果要將默認(rèn)的使用風(fēng)格,轉(zhuǎn)換為舊風(fēng)格的話,將crypto.DEFAULT_ENCODING
域設(shè)置為'binary'
。注意新的程序仍可能期望接受buffer
,所以這僅作為一個(gè)臨時(shí)措施。
更多建議: