Thursday 23 January 2020

Issues with nodejs crypto (.NET 3DES Encrypt/Decrypt)

Hi r/node,I'm really stuck with converting a code to integrate with a .NET legacy code. I've tried a lot of libraries, such as crypto-js, crypto-es, but could not make this work.The original code that I need to integrate with is the following, and the tries I've made are in the bottom. If anyone have any idea of what mistakes I'm doing, could give me some insights?string passPhrase = "test0001"; // get the md5 hash of passPhrase as byte array byte[] md5PassPhraseHash = null; MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); md5PassPhraseHash = md5.ComputeHash(Encoding.UTF8.GetBytes(passPhrase)); byte[] decodedSecret = Convert.FromBase64String(secretAsBase64); TripleDESCryptoServiceProvider tdes_dec = new TripleDESCryptoServiceProvider(); tdes_dec.Key = md5PassPhraseHash; byte[] cIV_dec = new byte[8]; Array.Copy(md5PassPhraseHash, cIV_dec, 8); tdes_dec.IV = cIV_dec; MemoryStream memstream_dec = new MemoryStream(); CryptoStream cs_dec = new CryptoStream(memstream_dec, tdes_dec.CreateDecryptor(), CryptoStreamMode.Write); cs_dec.Write(decodedSecret, 0, decodedSecret.Length); cs_dec.FlushFinalBlock(); cs_dec.Close(); byte[] decryptedSecret = memstream_dec.ToArray(); Int64 secret = Convert.ToInt64(Encoding.UTF8.GetString(decryptedSecret)); // increment secret secret = secret + 1; byte[] encodedSecret = Encoding.UTF8.GetBytes(Convert.ToString(secret)); TripleDESCryptoServiceProvider tdes_enc = new TripleDESCryptoServiceProvider(); tdes_enc.Key = md5PassPhraseHash; byte[] cIV_enc = new byte[8]; Array.Copy(md5PassPhraseHash, cIV_enc, 8); tdes_enc.IV = cIV_enc; MemoryStream memstream = new MemoryStream(); CryptoStream cs = new CryptoStream(memstream, tdes_enc.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(encodedSecret, 0, encodedSecret.Length); cs.FlushFinalBlock(); cs.Close(); byte[] encryptedSecret = memstream.ToArray(); string secret_encrypted = Convert.ToBase64String(encryptedSecret); I've tried a lot of libraries and the native "crypto" package, but could not make it work. Can someone help me? Either I get invalid key length or even iv length issues.​Here's one of the tries:static decrypt(passPhrase: string, secret: string): string { const md5PassPhraseHash = crypto .createHash('md5') .update(passPhrase) .digest(); const decodedSecret = Buffer.from(secret, 'base64').toString(); const iv = Buffer.from(md5PassPhraseHash.slice(0, 8)); const decipher = crypto.createDecipheriv('des-ede3-cbc', md5PassPhraseHash, iv); decipher.update(decodedSecret, 'base64', 'utf8'); const result = decipher.final('utf-8'); console.log({ result }); return result.toString(); }

Submitted January 23, 2020 at 09:31AM by dtiziani

No comments:

Post a Comment