Как реализовать расшифровку AES из строки, зашифрованной с помощью CryptoJS? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь расшифровать 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?

...