使用require('crypto')來獲取這個(gè)模塊。
crypto模塊提供了一種封裝安全證書的方法,用來作為安全 HTTPS 網(wǎng)絡(luò)和 HTTP 鏈接的一部分。
它也提供了一個(gè) OpenSSL hash,hamc,cipher,decipher,sign和vierify方法的包裝集合。
加載和設(shè)置 一些/所有 OpenSSL 功能引擎(由標(biāo)記選擇)。
引擎可以通過 id 或 引擎共享庫的路徑來選擇。
flags是可選的,并且有一個(gè)ENGINE_METHOD_ALL默認(rèn)值??梢赃x一個(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 證書的字符串或buffer。PEM加密私鑰的字符串。pfx密碼字符串。PEM加密憑證的字符串。PEM加密 CA 證書的字符串或字符串列表。PEM加密CRL的字符串或字符串列表。http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT如果沒有指定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è)指定算法的加密哈希用來生成哈希摘要。
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è)類用來創(chuàng)建數(shù)據(jù)哈希摘要。
這是一個(gè)同時(shí)可讀與可寫的流。寫入的數(shù)據(jù)用來計(jì)算哈希。一旦當(dāng)流的可寫端終止,使用read()來獲取計(jì)算所得哈希摘要。遺留的update和digest方法同樣被支持。
通過crypto.createHash返回。
使用給定的data更新哈希內(nèi)容,通過input_encoding指定的編碼可以是'utf8','ascii'或'binary'。如果沒有提供編碼,并且輸入是一個(gè)字符串,那么將會(huì)指定編碼為'binary'。如果data是一個(gè)Buffer那么input_encoding會(huì)被忽略。
它是流式數(shù)據(jù),所以這個(gè)方法可以被調(diào)用多次。
計(jì)算所有的被傳遞的數(shù)據(jù)的摘要。encoding可以是'binary','hex'或'base64'。如果沒有指定編碼,那么一個(gè)buffer被返回。
注意:當(dāng)調(diào)用了digest()方法之后,哈希對(duì)象不能再被使用了。
創(chuàng)建并返回一個(gè) hmac 對(duì)象,即通過給定的算法和密鑰生成的加密圖譜(cryptographic)。
這是一個(gè)既可讀又可寫的流。寫入的數(shù)據(jù)被用來計(jì)算 hamc。一旦當(dāng)流的可寫端終止,使用read()方法來獲取計(jì)算所得摘要值。遺留的update和digest方法同樣被支持。
algorithm依賴于平臺(tái)上的 OpenSSL 版本所支持的算法。參閱上文createHash。key是要使用的 hmac 密鑰。
用于創(chuàng)建 hmac 加密圖譜(cryptographic)的類。
通過crypto.createHmac返回。
只用指定的data更新 hmac 內(nèi)容。因?yàn)樗橇魇綌?shù)據(jù),所以這個(gè)方法可以被調(diào)用多次。
計(jì)算所有的被傳遞的數(shù)據(jù)的 hmac 摘要。encoding可以是'binary','hex'或'base64'。如果沒有指定編碼,那么一個(gè)buffer被返回。
注意:當(dāng)調(diào)用了digest()方法之后,hmac 對(duì)象不能再被使用了。
創(chuàng)建和返回一個(gè)cipher對(duì)象,指定指定的算法和密碼。
算法依賴于 OpenSSL,如果'aes192',等等。在最近的發(fā)行版中,openssl list-cipher-algorithms命令會(huì)展示可用的cipher算法。密碼被用來獲取密鑰和 IV,必須是一個(gè)'binary'編碼的字符串或buffer。
這是一個(gè)既可讀又可寫的流。寫入的數(shù)據(jù)被用來計(jì)算哈希。一旦當(dāng)流的可寫端終止,使用read()方法來獲取通過cipher計(jì)算所得的內(nèi)容。遺留的update和digest方法同樣被支持。
注意:createCipher通過 無鹽MD5一次迭代所得的摘要 來調(diào)用 OpenSSL函數(shù)EVP_BytesToKey` 來派生密鑰。無鹽意味允許字典攻擊,即同樣的密碼經(jīng)??梢杂脕韯?chuàng)建同樣的密鑰。一次迭代并且無加密圖譜安全(non-cryptographically secure)以為著允許密碼被快速測(cè)試。
OpenSSL建議使用pbkdf2替代EVP_BytesToKey,推薦你通過crypto.pbkdf2然后調(diào)用createCipheriv()創(chuàng)建一個(gè)cipher流來派生一個(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è)既可讀又可寫的流。寫入的文本數(shù)據(jù)被用來在可讀端生產(chǎn)被加密的數(shù)據(jù)。遺留的update和final方法同樣被支持。
通過data更新cipher,input_encoding中指定的編碼可以是'utf8','ascii'或'binary'。如果沒有提供編碼,那么希望接受到一個(gè)buffer。如果數(shù)據(jù)是一個(gè)Buffer,那么input_encoding將被忽略。
output_encoding指定了加密數(shù)據(jù)的輸出格式,可以是'binary','base64'或'hex'。如果沒有指定編碼,那么一個(gè)buffer會(huì)被返回。
返回一個(gè)加密內(nèi)容,并且因?yàn)樗橇魇綌?shù)據(jù),所以可以被調(diào)用多次。
返回所有的剩余的加密內(nèi)容,output_encoding可以是'binary','base64'或'hex'。如果沒有指定編碼,那么一個(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ù)類。
通過crypto.createDecipher和crypto.createDecipheriv返回。
這是一個(gè)既可讀又可寫的流。寫入的被加密的數(shù)據(jù)被用來在可讀端生產(chǎn)文本數(shù)據(jù)。遺留的update和final方法同樣被支持。
通過data更新decipher,編碼可以是'binary','base64'或'hex'。如果沒有提供編碼,那么希望接受到一個(gè)buffer。如果數(shù)據(jù)是一個(gè)Buffer,那么input_encoding將被忽略。
output_encoding指定了解密數(shù)據(jù)的輸出格式,可以是'binary','ascii'或'utf8'。如果沒有指定編碼,那么一個(gè)buffer會(huì)被返回。
返回所有的剩余的文本數(shù)據(jù),output_encoding可以是'binary','ascii'或'utf8'。如果沒有指定編碼,那么一個(gè)buffer會(huì)被返回。
注意:當(dāng)調(diào)用了final()方法之后,decipher 對(duì)象不能再被使用了。
如數(shù)據(jù)沒有使用標(biāo)準(zhǔn)塊填充阻止decipher.final檢查和刪除它來加密,你可以禁用自動(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è)方法必須被傳遞,用來接受認(rèn)證標(biāo)簽。如果沒有提供標(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ù)字簽名的類。
通過crypto.createSign返回。
Sign對(duì)象是一個(gè)可寫流。寫入的數(shù)據(jù)用來生成數(shù)字簽名。一旦所有的數(shù)據(jù)被寫入,sign方法會(huì)返回一個(gè)數(shù)字簽名。遺留的update方法也支持。
使用data更新sign對(duì)象。因?yàn)樗橇魇降乃赃@個(gè)方法可以被調(diào)用多次。
根據(jù)所有通過update方法傳入的數(shù)據(jù)計(jì)算數(shù)字簽名。
private_key可以是一個(gè)對(duì)象或一個(gè)字符串,如果private_key是一個(gè)字符串,那么它被當(dāng)做沒有密碼的密鑰。
__private_key__:
PEM編碼私鑰的字符串。返回的數(shù)字簽名編碼由output_format決定,可以是'binary','hex'或'base64'。如果沒有指定編碼,會(huì)返回一個(gè)buffer。
注意,在調(diào)用了sign()后,sign對(duì)象不能再使用了。
使用給定的算法,創(chuàng)建并返回一個(gè)驗(yàn)證器對(duì)象。這個(gè)對(duì)象是sign對(duì)象的鏡像。
用來驗(yàn)證數(shù)字簽名的類。
由crypto.createVerify返回。
Verify對(duì)象是一個(gè)可寫流。寫入的數(shù)據(jù)用來驗(yàn)證提供的數(shù)字簽名。一旦所有的數(shù)據(jù)被寫入,verify方法會(huì)返回true如果提供的數(shù)字簽名有效。遺留的update方法也支持。
使用data更新verifier對(duì)象。因?yàn)樗橇魇降乃赃@個(gè)方法可以被調(diào)用多次。
通過使用object和signature驗(yàn)證被簽名的數(shù)據(jù)。object是一個(gè)包含了PEM編碼對(duì)象的字符串,這個(gè)對(duì)象可以是RSA公鑰,DSA公鑰或X.509證書。signature是先前計(jì)算出來的數(shù)字簽名,signature_format可以是'binary','hex'或'base64'。如果沒有指定編碼,那么希望收到一個(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ù)字生成器。如果沒有指定生成器,將使用2。
通過給定的質(zhì)數(shù),和可選的生成器,創(chuàng)建一個(gè)迪菲-赫爾曼密鑰交換對(duì)象(Diffie-Hellman key exchange object)。generator可以是一個(gè)數(shù)字,字符串或Buffer。如果沒有指定生成器,將使用2。prime_encoding和generator_encoding可以是'binary','hex'或'base64'。如果沒有指定prime_encoding,那么希望prime是一個(gè)Buffer。如果沒有指定generator_encoding,那么希望generator是一個(gè)Buffer。
叫來創(chuàng)建迪菲-赫爾曼密鑰交換的類。
通過crypto.createDiffieHellman返回。
一個(gè)包含了所有警告和/或錯(cuò)誤的位域,作為檢查初始化時(shí)的執(zhí)行結(jié)果。以下是這個(gè)屬性的合法屬性(被常量模塊定義):
生成一個(gè) 私和公 迪菲-赫爾曼 密鑰值,并且返回一個(gè)指定編碼的公鑰。這個(gè)密鑰可以被轉(zhuǎn)移給第三方。編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
使用other_public_key作為第三方密鑰來計(jì)算共享秘密(shared secret),并且返回計(jì)算結(jié)果。提供的密鑰會(huì)以input_encoding來解讀,并且秘密以output_encoding來編碼。編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
如果沒有指定output_encoding,那么會(huì)返回一個(gè)buffer。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼質(zhì)數(shù),編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼生成器,編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼公鑰,編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
根據(jù)指定編碼返回一個(gè)迪菲-赫爾曼私鑰,編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
設(shè)置迪菲-赫爾曼公鑰,密鑰編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么期望接收一個(gè)buffer。
設(shè)置迪菲-赫爾曼私鑰,密鑰編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么期望接收一個(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ì)象的借口,但是不允許交換密鑰(如通過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()來獲取可用的橢圓名列表。在最近的發(fā)行版中,openssl ecparam -list_curves命令也會(huì)展示可用的橢圓曲線的名字和簡(jiǎn)述。
用于 EC 迪菲-赫爾曼密鑰交換的類。
由crypto.createECDH返回。
生成一個(gè) 私/公 EC 迪菲-赫爾曼密鑰值,并且返回指定格式和編碼的公鑰。這個(gè)密鑰可以被轉(zhuǎn)移給第三方。
format指定點(diǎn)的編碼,可以是'compressed','uncompressed'或'hybrid'。如果沒有指定,那么點(diǎn)將是'uncompressed'格式。
編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
使用other_public_key作為第三方密鑰來計(jì)算共享秘密(shared secret),并且返回計(jì)算結(jié)果。提供的密鑰會(huì)以input_encoding來解讀,并且秘密以output_encoding來編碼。編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
如果沒有指定output_encoding,那么會(huì)返回一個(gè)buffer。
返回指定編碼和格式的 EC 迪菲-赫爾曼公鑰。
format指定點(diǎn)的編碼,可以是'compressed','uncompressed'或'hybrid'。如果沒有指定,那么點(diǎn)將是'uncompressed'格式。
編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
返回指定編碼的 EC 迪菲-赫爾曼私鑰,編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么會(huì)返回一個(gè)buffer。
設(shè)置 EC 迪菲-赫爾曼公鑰。密鑰編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么期望接收一個(gè)buffer。
設(shè)置 EC 迪菲-赫爾曼私鑰。密鑰編碼可以是'binary','hex'或'base64'。如果沒有提供編碼,那么期望接收一個(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)來獲取一個(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'
});
可用通過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)超過幾毫秒。唯一可以想到的阻塞是情況是,當(dāng)整個(gè)系統(tǒng)的熵還是很低時(shí),在其之后啟動(dòng)。
這個(gè)類用來處理已簽名公鑰 & 挑戰(zhàn)(challenges)。最常用的是它的一系列處理<keygen>元素的函數(shù)。http://www.openssl.org/docs/apps/spkac.html。
通過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ì)被視作沒有密碼的密鑰并且將使用RSA_PKCS1_OAEP_PADDING。因?yàn)?code>RSA公鑰可以用來從你傳遞給這個(gè)方法的密鑰來獲取。
__public_key__:
注意:所有的填充值都被常量模塊所定義。
詳情參閱上文。與crypto.publicEncrypt有相同 API。默認(rèn)填充值是RSA_PKCS1_PADDING。
使用private_key解密buffer。
private_key可以是一個(gè)對(duì)象或一個(gè)字符串。如果private_key是一個(gè)字符串,它會(huì)當(dāng)做沒有密碼的密鑰,并且使用RSA_PKCS1_OAEP_PADDING。
__public_key__:
注意:所有的填充值都被常量模塊所定義。
詳情參閱上文。與crypto.privateDecrypt有相同 API。默認(rèn)填充值是RSA_PKCS1_PADDING。
默認(rèn)編碼是用于接受字符串或buffer的函數(shù)。默認(rèn)值是'buffer',所以默認(rèn)是使用Buffer對(duì)象的。這被用來與舊的以'binary'為默認(rèn)編碼的程序更好地兼容。
注意新的程序仍可能期望使用buffer,所以只將它作為一個(gè)臨時(shí)措施。
Crypto模塊在還沒有統(tǒng)一的流 API 概念,以及沒有Buffer對(duì)象來處理二進(jìn)制數(shù)據(jù)前就加入了Node.js。
因?yàn)檫@樣,它的流類沒有其他io.js類的典型類,而且很多方法默認(rèn)接受和返回二進(jìn)制字符串而不是Buffer。這些函數(shù)將被改成默認(rèn)接受和返回Buffer。
這對(duì)于一些但不是所有的使用場(chǎng)景來說是巨大的改變。
例如,如果你現(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ù)庫等)?;蛘邔?duì)crypto函數(shù)不傳遞編碼參數(shù)來傳遞二進(jìn)制字符串。那么以后,你需要提供你想要指定的編碼。如果要將默認(rèn)的使用風(fēng)格,轉(zhuǎn)換為舊風(fēng)格的話,將crypto.DEFAULT_ENCODING域設(shè)置為'binary'。注意新的程序仍可能期望接受buffer,所以這僅作為一個(gè)臨時(shí)措施。