2017-01-24 2 views
1

Bonjour et désolé si ma question est stupide, je ne fais que commencer sur nodejs et apporter un lourd bagage de PHP monde. J'essaye de crypter un fichier en utilisant une clé publique générée par la ligne de commande linux en utilisant la commande GnuPG.Crypter un fichier avec Nodejs (Crypto) renvoyer une erreur: mauvais base64 decode

Sur mon application, j'utilise Express, fs et Crypto pour créer un tampon à partir du fichier et obtenir le contenu de la clé publique, puis utiliser publicEncrypt pour obtenir les données cryptées. Lorsque je fais cela, l'application s'arrête et envoie une erreur en se plaignant du format PEM: mauvais décodage base64.

Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode 

Ici vous avez les principales parties de ce code:

var encryptStringWithRsaPublicKey = function(toEncrypt, relativeOrAbsolutePathToPublicKey) { 
var absolutePath = path.resolve(relativeOrAbsolutePathToPublicKey); 
var publicKey = fs.readFileSync(absolutePath, "utf8"); 
if(typeof toEncrypt !=='object') return false; 
var buffer = new Buffer(toEncrypt); 
console.log(publicKey); 
var encrypted = crypto.publicEncrypt(publicKey, buffer); 
return encrypted.toString("base64"); 

}; Peut-être que la clé publique a des caractères de fin de ligne quelque part ou peut-être que Crypto requiert un format très spécial?

Ceci est le contenu de la clé de pub:

-----BEGIN PGP PUBLIC KEY BLOCK----- 
Version: GnuPG v1 

mQENBFiFz2ABCADGk6E2IgbaGYIHO7EVNotxiDjB4k5UZJ4xx41RwY9LeG0c+SLW 
rC/ijPFJZ/kN3nrpvTAZEYpnK51olqvw/OOgt5p3k32mW47HALx91vU9WRrykt2Y 
DMj+aeMDi5QZnda8qTnWCW3E+OBg4W0ZdpwPs+eOyHWRjp6zuBFxZfrtKQuFlzHs 
6KKczdGidemUQCZL7ve34EQmgeh4rDJ1oNC8QzSFOYZHiSVQDXGvZSFirc3OMZus 
JiflY1Al3Y0fJj2m8catu/i9bKfAPA+YE+yU86BrgV05Skn82px2K3coiI/+eSjp 
j/ROxijvwzLf/F98B3/AiMJjx8pD/9APmnSbABEBAAG0MVBheSBGaWxlIChDdWJl 
IEluc3BpcmUpIDxwYXlmaWxlQGN1YmVpbnNwaXJlLmNvbT6JATgEEwECACIFAliF 
z2ACGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEBeEp+MzfXEgefgH/0bJ 
Oug/m66vlENqR+y6Z+mbC7RzFnhvojJ51EB6JlJe9EJ2VwtcirxorY5zL9DjTyB2 
ys/kzdeN0+FmuIIO0To7ksB1ASZ5jsg1UdQEvLuLeSZSJRzbmz9M7jvxEfR+vz0h 
RJPqs6EfgAOtRyDs8C/IXyWTrhu1wI+09CChjBH0/tCJ2sO074f4xMY1IYzf8nm7 
ohuiGpN1egHOVjIjIajpmb94dGBXnbGNq/tzNwGZu9GUtaeTs3+kuqqy0+eIQDvR 
7AU4Gt43etwpFz4dbWVDd77OxKUFshilaChIAwGmngfFn3ksnrl/AZVsGIJrxmy0 
ja5t+yZOwl7KdC82SOa5AQ0EWIXPYAEIAOHRdsrEm/WFG3Fps++Mo6xUf/CFTyz3 
WQr2nkOoBxAzcHPQd/3muDNKUblRhxZMrwuVZcnOZVOOz9rMqaM5kYSAB84PpVpG 
26QcYFUn5WCmR3KSn9MiKqtSFJDn695ysaCdzzEW5Y/eKgxydG4rhFOy07VcKTev 
dBC19XcukjxAbzmnZ7qUFhaRrS2u11mA+s0FmRz+EVOd0uxQdJq/Lps1nMvZ3UfL 
saHJuBDgX+gCarbt+7uSx3aC/jBDzrq63Ry7nqN5mypSMRBeEAmi7kKToIRDj0Uj 
xwqCgU4NVj8zCG2iBlOzrfKPk9oMLgHBvMPQYDW9wLz5rQnoVr4RkrUAEQEAAYkB 
HwQYAQIACQUCWIXPYAIbDAAKCRAXhKfjM31xIBDYB/0VTjC/zvFHJwD5t+8DzHjN 
UqPg7Mk0kYbu6dyPYb0/S2G5uZa3LoJ99EgOhgFlfUHM9k0GBC0OTxKiUEqKtENH 
+W/wBouTltqGGyzDit+KlqzKz9gsyWF/HO3GTg1Df9D8o3MhUHRGjEeuik0BbJyd 
Hy4YfDk5a4qUYtFztbmUSxVqdLlFBZ7oMn3n+A25HaDtohv9g1ZC3gTLD+yTTMsG 
ruOEs6ZMIOENn6pgsjFdMIUmJVP3tt9n538jVfbVf7EgTrPt+JKjoQF3EfTysTnO 
Y0IuotQuA83+5Fa6IY+iFLLvkNABr1WACVOKMUzBJJJG7EnlvgPufZL3eJE4LUZ9 
=rpky 
-----END PGP PUBLIC KEY BLOCK----- 
+2

Les données telles que le contenu des fichiers sont généralement cryptés avec des algorithmes symétriques tels que AES, qui n'a pas de limite de taille des données. Un cryptage asymétrique tel que RSA est généralement utilisé pour crypter les clés symétriques et la taille des données est limitée à moins de la taille de la clé. – zaph

+1

Vérifiez la documentation pour CryptoJS - il peut s'attendre à une clé RSA et ne pas pouvoir gérer le commentaire de la version GPG (qui n'est pas codé en Base64). – Andy

Répondre

0

J'ai trouvé la solution à mon problème.

En fait, la méthode publicEncrypt est une enveloppe d'OpenSSL et attend une clé publique/privée sur ce format. Une clé de GPG ne le fera pas.

En générant les clés publiques et privées avec la commande suivante du code de travail comme prévu:

$ openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 
$ openssl rsa -pubout -in private_key.pem -out public_key.pem