- 继承自: {stream.Transform}
Decipher 类的实例用于解密数据。
该类可以通过以下两种方式之一使用:
- 作为可读写的[流][stream],其中写入加密的数据以在可读侧生成未加密的数据。
- 使用 [
decipher.update()] 和 [decipher.final()] 方法生成未加密的数据。
[crypto.createDecipher()] 或 [crypto.createDecipheriv()] 方法用于创建 Decipher 实例。
不能使用 new 关键字直接地创建 Decipher 对象。
示例,使用 Decipher 对象作为流:
const crypto = require('crypto');const algorithm = 'aes-192-cbc';const password = '用于生成密钥的密码';// 密钥长度取决于算法。// 在此示例中,对于 aes192,它是 24 个字节(192 位)。// 改为使用异步的 `crypto.scrypt()`。const key = crypto.scryptSync(password, '盐值', 24);// IV 通常与密文一起传递。const iv = Buffer.alloc(16, 0); // 初始化向量。const decipher = crypto.createDecipheriv(algorithm, key, iv);let decrypted = '';decipher.on('readable', () => {while (null !== (chunk = decipher.read())) {decrypted += chunk.toString('utf8');}});decipher.on('end', () => {console.log(decrypted);// 打印: 要加密的数据});// 使用相同的算法、密钥和 iv 进行加密。const encrypted ='9d47959b80d428936beef61216ef0b7653b5d23a670e082bd739f6cebcb6038f';decipher.write(encrypted, 'hex');decipher.end();
示例,使用 Decipher 和管道流:
const crypto = require('crypto');const fs = require('fs');const algorithm = 'aes-192-cbc';const password = '用于生成密钥的密码';// 改为使用异步的 `crypto.scrypt()`。const key = crypto.scryptSync(password, '盐值', 24);// IV 通常与密文一起传递。const iv = Buffer.alloc(16, 0); // 初始化向量。const decipher = crypto.createDecipheriv(algorithm, key, iv);const input = fs.createReadStream('要解密的数据.enc');const output = fs.createWriteStream('解密后的数据.js');input.pipe(decipher).pipe(output);
示例,使用 [decipher.update()] 和 [decipher.final()] 方法:
const crypto = require('crypto');const algorithm = 'aes-192-cbc';const password = '用于生成密钥的密码';// 改为使用异步的 `crypto.scrypt()`。const key = crypto.scryptSync(password, '盐值', 24);// IV 通常与密文一起传递。const iv = Buffer.alloc(16, 0); // 初始化向量。const decipher = crypto.createDecipheriv(algorithm, key, iv);// 使用相同的算法、密钥和 iv 进行加密。const encrypted ='9d47959b80d428936beef61216ef0b7653b5d23a670e082bd739f6cebcb6038f';let decrypted = decipher.update(encrypted, 'hex', 'utf8');decrypted += decipher.final('utf8');console.log(decrypted);// 打印: 要加密的数据
