У меня есть приложение C #, которое использует следующие методы для шифрования и дешифрования паролей в базе данных:
public static string Encrypt(string input, string key)
{
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateEncryptor();
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string input, string key)
{
byte[] inputArray = Convert.FromBase64String(input);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
Поэтому, если я зашифрую пароль testing
с помощью ключа 0123456789012345
, результат будет +dc6bsOFg00=
.
Теперь мне нужно прочитать эти пароли из приложения NodeJS (используя CryptoJS), но я не уверен, как это сделать, поскольку в C # шифрование побайтно-ориентировано (обратите внимание, что в коде оба input
и key
преобразуются в byte[]
), тогда как в CryptoJS он более ориентирован на строки.
Я безуспешно пытался использовать эту функцию JavaScript:
var CryptoJS = require("crypto-js");
function decrypt(input, key) {
var inputArray = new Buffer(input, 'base64');
var inputString = inputArray.toString();
var resultArray = CryptoJS.TripleDES.decrypt(inputString, key, {'mode': CryptoJS.mode.ECB, 'pad': CryptoJS.pad.Pkcs7});
return resultArray.toString();
}
console.log(decrypt("+dc6bsOFg00=", "0123456789012345"));
Обновление: я знаю, что шифрование паролей - плохая идея и что Triple DES - не лучший алгоритм, но приложение C # не может быть изменено (по крайней мере, для сейчас), поэтому я не могу изменить способ шифрования паролей, я должен прочитать их в том виде, в каком они есть сейчас.
crypto
вместо модуля сторонний модуль. - person mscdex   schedule 15.11.2016inputArray.toString()
, по умолчанию используется кодировка UTF-8. Может быть, это должно бытьinputArray.toString('binary')
вместо этого? - person RogerN   schedule 16.11.2016