Шифрование на Java и дешифрование на C # с помощью Rijndael

Можно ли с помощью алгоритма Rijndael зашифровать файл конфигурации (или разделы в файле конфигурации), а затем расшифровать этот файл на Java? Допущения могут быть такими, как:

  1. Передать IV (не созданная автоматически идея :: GenerateIV ();)
  2. Пройти ключ
  3. BlockSize - 128 (стандартный)

Предполагая, что это можно сделать, мой следующий вопрос по этому поводу будет следующим:

  1. Может keySize быть 256? Я знаю, что 128 - это AES, но мы хотели бы использовать 256. Я также не знаю, есть ли у Java этот провайдер для 256 или мне нужно использовать BouncyCastle.
  2. Что такое набивка? PKCS7?
  3. Я предполагаю, что CiperMode будет CBC

Что-то вроде этого в c #? Но, не знаю, можно ли его расшифровать на Java ... возможно, даже мой С # ошибается?

public static void initCrypt()
    {
        byte[] keyBytes = System.Text.UTF8Encoding.UTF8.GetBytes("abcdefghijklmnop");

        rijndaelCipher = new RijndaelManaged();
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(keyBytes, new SHA1CryptoServiceProvider().ComputeHash(keyBytes));
        byte[] key = pdb.GetBytes(32);
        byte[] iv = pdb.GetBytes(16);
        rijndaelCipher.Mode = CipherMode.CBC;
        rijndaelCipher.Padding = PaddingMode.PKCS7; //PaddingMode.PKCS7 or None or Zeros
        rijndaelCipher.KeySize = 256; //192, 256
        rijndaelCipher.BlockSize = 128;
        rijndaelCipher.Key = keyBytes;
        rijndaelCipher.IV = iv;
    }

person Community    schedule 16.06.2009    source источник


Ответы (3)


Я бы проверил, поддерживает ли это внешняя библиотека, такая как keyczar.

Как научил нас Джефф Этвуд в своем блоге недавно 99% разработчиков не должны беспокоиться о низкоуровневых деталях процедур шифрования (потому что мы наверняка облажались).

person matt b    schedule 16.06.2009
comment
Совершенно верно - почему я рекомендую внешнюю программу. - person Tom Ritter; 17.06.2009
comment
Он упоминает использование bouncycastle в качестве примера, который абстрагирует это. Я действительно хочу это сделать, поэтому я особо не занимаюсь другим ... Я просто хочу убедиться, что провайдеры работают на разных платформах. - person ; 17.06.2009
comment
Что ж, алгоритмы шифрования - это просто алгоритмы, верно? Так что ничего в этом не должно зависеть от платформы. Любую серию шагов, которые вы можете выполнить на одном языке для шифрования файла, вы должны иметь возможность написать код на любом другом языке, чтобы затем расшифровать его. Если нет, то с вашим алгоритмом что-то не так. - person matt b; 17.06.2009

В зависимости от того, как вы используете этот файл конфигурации, вы можете использовать внешнюю программу.

Например, если вы хотите защитить файл конфигурации, пока он находится на диске, но вы не против, чтобы его содержимое сохранялось в памяти во время работы программы, вы можете использовать gpg, чтобы зашифровать файл, расшифровать его в память, используя вводимый пользователем пароль, который требуется программе при ее запуске, а затем очистить память при завершении работы. программа. [1]

[1] Стоит отметить, что нет реального способа гарантировать, что содержимое не будет записано на диск из-за подкачки памяти и т.п. Это зависит от операционной системы и многих факторов, которые вы можете найти, если вам это интересно.

person Tom Ritter    schedule 16.06.2009

Q1: должно быть 128, иначе вам придется использовать BouncyCastle.

Q2: Да PKCS7

Q3: Да CBC

Если ваш вопрос не мертв, я могу привести вам рабочие примеры c # и java

person anael    schedule 23.02.2011
comment
Мне было бы интересно посмотреть примеры .. Я пытаюсь сделать что-то подобное - person CJ Garber; 25.02.2011