O node.js já possui codificação base64 embutida?
A razão pela qual pergunto isso é que final()
from crypto
só pode gerar dados hexadecimais, binários ou ascii. Por exemplo:
var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'hex');
ciph += cipher.final('hex');
var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'hex', 'utf8');
txt += decipher.final('utf8');
De acordo com os documentos, update()
pode gerar dados codificados em base64. No entanto, final()
não suporta base64. Eu tentei e ele vai quebrar.
Se eu fizer isso:
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('hex');
Então, o que devo usar para descriptografia? Hex ou base64?
Portanto, estou procurando uma função para codificar em base64 minha saída hexadecimal criptografada.
cipher.final('base64')
obrasRespostas:
Os buffers podem ser usados para obter uma sequência de caracteres ou dados e fazer a codificação base64 do resultado. Por exemplo:
Os buffers são um objeto global, portanto, não é necessário. Os buffers criados com cadeias de caracteres podem usar um parâmetro de codificação opcional para especificar em qual codificação ela está. As codificações disponíveis
toString
e deBuffer
construtor são as seguintes:fonte
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
.toString("binary")
(atob
significa ASCII (base64) para binário, afinal)A resposta aceita anteriormente continha
new Buffer()
, o que é considerado um problema de segurança em versões de nó maiores que 6 (embora pareça provável para esse caso de uso que a entrada sempre possa ser coagida a uma sequência de caracteres).O
Buffer
construtor foi descontinuado de acordo com a documentação .Aqui está um exemplo de vulnerabilidade que pode resultar do uso na biblioteca ws.
Os trechos de código devem ser:
Depois que essa resposta foi escrita, ela foi atualizada e agora corresponde a isso.
fonte
new Buffer
) em vez deBuffer.from
.O crypto agora suporta base64 ( referência ):
Então você poderia simplesmente fazer:
fonte
Os buffers podem ser usados para obter uma sequência de caracteres ou dados e fazer a codificação base64 do resultado. Por exemplo:
Você pode instalar o Buffer via npm como: -
npm i buffer --save
você pode usar isso em seu
js
arquivo como este: -fonte
Estou usando o seguinte código para decodificar a sequência base64 na API do nó nodejs versão 10.7.0
Por favor, não tente executar o código acima no console do navegador, não funcionará. Coloque o código nos arquivos do servidor do nodejs. Estou usando o código de linha acima no desenvolvimento da API.
fonte
Eu criei uma pequena biblioteca js npm final para a conversão de codificação / decodificação base64 no Node.js.
Instalação
Uso
fonte
Você pode codificar e decodificar base64 com javascript simples.
Isso é implementado neste decodificador do codificador Base64
fonte