Шифрование в Java и дешифрование в C # с Rijndael - PullRequest
4 голосов
/ 16 июня 2009

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

  1. Пропуск в IV (не сгенерированная идея :: GenerateIV ();)
  2. Pass in Key
  3. BlockSize - 128 (стандартный)

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

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

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

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;
    }

Ответы [ 3 ]

2 голосов
/ 17 июня 2009

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

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

1 голос
/ 16 июня 2009

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

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

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

0 голосов
/ 23 февраля 2011

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

Q2: Да, PKCS7

Q3: Да, CBC

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

...