Я пытаюсь расшифровать Aes, созданный из JavaScript AES Encryptor из библиотеки CryptoJS . Я пытаюсь прочитать строку, которая была зашифрована этой библиотекой, и расшифровать ее в моем проекте C # с помощью следующего:
public static string Decrypt(string message, string secret, string salt = "zAvR2NI87bBx746n") {
return Encoding.UTF8.GetString(AESDecryptBytes(
Encoding.UTF8.GetBytes(message),
Encoding.UTF8.GetBytes(secret),
Encoding.UTF8.GetBytes(salt)
));
}
private static byte[] AESDecryptBytes(byte[] cryptBytes, byte[] passBytes, byte[] saltBytes) {
byte[] clearBytes = null;
// create a key from the password and salt, use 32K iterations
// var key = new Rfc2898DeriveBytes(passBytes, saltBytes, 32768);
var key = new Rfc2898DeriveBytes(passBytes, saltBytes, 1000);
using (Aes aes = new AesManaged()) {
// set the key size to 256
aes.KeySize = 256;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
aes.Key = key.GetBytes(aes.KeySize / 8);
aes.IV = key.GetBytes(aes.BlockSize / 8);
using (MemoryStream ms = new MemoryStream()) {
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write)) {
cs.Write(cryptBytes, 0, cryptBytes.Length);
cs.Close();
}
clearBytes = ms.ToArray();
}
}
return clearBytes;
}
Данные были зашифрованы в JavaScript следующим образом:
// data is a JSON string
// gs.cryptoSecret is a string of random characters
let saveData = CryptoJS.AES.encrypt(data || '', gs.cryptoSecret).toString()
Когда я пытаюсь использовать мой метод для расшифровки данных, я получаю следующее сообщение об ошибке:
CryptographicException: неверный размер входного блока.
Который запускается cs.Close();
. Вполне возможно, что secret
не был реализован, и я не совсем уверен, куда это приведет ...
Как я могу реализовать этот расшифровщик для работы вместе с библиотекой JavaScript?