AES criptare in .NET e decodificare con Node.js crypto?

Sto cercando di crittografare alcuni dati in Mono C #, inviarlo a un server NodeJS e decodificarlo lì. Sto cercando di capire quali algoritmi utilizzare per abbinare i due.

Invio la stringa crittografata codificata con base64. Così faccio qualcosa di simile in Javascript, dove conosco la chiave che è stata usata per crittografare i dati nella mia applicazione C #:

var decipher = crypto.createDecipher('aes192',binkey, biniv); var dec = decipher.update(crypted,'base64','utf8'); dec += decipher.final('utf8'); console.log("dec", dec); 

In Mono creo il mio Cypher con:

 using System.Security.Cryptography; using (Aes aesAlg = Aes.Create("aes192")) 

Devo passare la stringa corretta ad Aes.Create () per far sì che usi lo stesso algoritmo, ma non riesco a trovare quello che dovrebbe essere. “aes192” non è corretto sembra.

Non ho bisogno di aes192 questo era solo un tentativo. Suggerisci un diverso sapore di crittografia se ha senso. La sicurezza non è un grosso problema.

Ecco i link ai documenti .NET e Nodejs: http://msdn.microsoft.com/en-us/library/system.security.cryptography.aes.aspx http://nodejs.org/api/crypto.html

Questo codice funziona per il mio lato Node.js, ma per favore sostituisci l’iv statico, altrimenti la crittografia aes sarebbe inutile.

 var crypto = require('crypto'); function encrypt(data, key) { key = key || new Buffer(Core.config.crypto.cryptokey, 'binary'), cipher = crypto.createCipheriv('aes-256-cbc', key.toString('binary'), str_repeat('\0', 16)); cipher.update(data.toString(), 'utf8', 'base64'); return cipher.final('base64'); } function decipher(data, key) { key = key || new Buffer(Core.config.crypto.cryptokey, 'binary'), decipher = crypto.createDecipheriv('aes-256-cbc', key.toString('binary'), str_repeat('\0', 16)); decipher.update(data, 'base64', 'utf8'); return decipher.final('utf8'); } function str_repeat(input, multiplier) { var y = ''; while (true) { if (multiplier & 1) { y += input; } multiplier >>= 1; if (multiplier) { input += input; } else { break; } } return y; } 

Spero che questo ti aiuta.

NOTA: per far funzionare questo algoritmo è necessario fornire un codice a 265 bit alias 32 caratteri.

POSSIBILE SOLUZIONE .NET: questo può aiutarti Esempio

Dovresti semplicemente scrivere new AesManaged() .
Non è necessario chiamare Create() .

È quindi necessario impostare Key e IV , quindi chiamare CreateDecryptor() e inserirlo in un CryptoStream .

Si è rivelato un errore stupido. Pensavo che la funzione di creazione in Node.js potesse prendere un conteggio di argomenti variabili. È venuto fuori che è necessario chiamare il createDecipheriv ().

Solo per la cronaca, puoi facilmente controllare il padding e la modalità osservando quelle proprietà nell’object Aes. I valori predefiniti sono CBC e PKCS7. Tale riempimento viene anche utilizzato in nodejs crypto. Quindi, per una chiave da 128 il mio codice per decrittografare una stringa codificata in base64 sarebbe:

 var crypto = require('crypto'); var binkey = new Buffer(key, 'base64'); var biniv = new Buffer(iv, 'base64'); var decipher = crypto.createDecipheriv('aes-128-cbc', binkey, biniv); var decrypted = decipher.update(crypted,'base64','utf8'); decrypted += decipher.final('utf8'); console.log("decrypted", decrypted);