Node.js a-t-il déjà un encodage base64 intégré?
La raison pour laquelle je pose cette question est que final()
from crypto
ne peut sortir que des données hexadécimales, binaires ou ascii. Par exemple:
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');
Selon les documents, update()
peut produire des données encodées en base64. Cependant, final()
ne prend pas en charge base64. J'ai essayé et ça va casser.
Si je fais ça:
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('hex');
Alors, que dois-je utiliser pour le déchiffrement? Hex ou base64?
Par conséquent, je recherche une fonction pour coder en base64 ma sortie hexadécimale cryptée.
cipher.final('base64')
travaux de 2016Réponses:
Tampons peuvent être utilisés pour prendre une chaîne ou un morceau de données et effectuer un codage base64 du résultat. Par exemple:
Les tampons sont un objet global, donc aucune exigence n'est nécessaire. Les tampons créés avec des chaînes peuvent prendre un paramètre de codage facultatif pour spécifier le codage de la chaîne.
toString
Buffer
codages et constructeurs sont les suivants:la source
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
.toString("binary")
(atob
signifie ascii (base64) en binaire, après tout)La réponse acceptée contenait précédemment
new Buffer()
, ce qui est considéré comme un problème de sécurité dans les versions de nœuds supérieures à 6 (bien qu'il semble probable pour cette utilisation que l'entrée puisse toujours être contrainte à une chaîne).Le
Buffer
constructeur est obsolète selon la documentation .Voici un exemple de vulnérabilité pouvant résulter de son utilisation dans la bibliothèque ws.
Les extraits de code doivent indiquer:
Après que cette réponse a été écrite, elle a été mise à jour et correspond maintenant à cela.
la source
new Buffer
) plutôt queBuffer.from
.crypto prend désormais en charge base64 ( référence ):
Vous pouvez donc simplement faire:
la source
Les tampons peuvent être utilisés pour prendre une chaîne ou un morceau de données et effectuer un codage base64 du résultat. Par exemple:
Vous pouvez installer Buffer via npm comme: -
npm i buffer --save
vous pouvez utiliser ceci dans votre
js
fichier comme ceci: -la source
J'utilise le code suivant pour décoder la chaîne base64 dans l'API de nœud nodejs version 10.7.0
N'essayez pas d'exécuter le code ci-dessus dans la console du navigateur, cela ne fonctionnera pas. Mettez le code dans les fichiers côté serveur de nodejs. J'utilise le code de ligne ci-dessus dans le développement d'API.
la source
J'ai créé une petite bibliothèque js npm ultime pour la conversion d'encodage / décodage base64 dans Node.js.
Installation
Usage
la source
Vous pouvez effectuer l'encodage et le décodage base64 avec un simple javascript.
Ceci est implémenté dans ce décodeur d'encodeur Base64
la source