Шифровать и расшифровывать строку в java

Я новичок в криптографии. Я хочу узнать, как шифровать и расшифровывать текст в файле... когда я ссылаюсь на связанные статьи в сети. У меня возникло сомнение в том, будет ли зашифрованный текст одинаковым для одного текста, если шифрование выполняется несколько раз в одном тексте? Кто-нибудь может очистить мои сомнения?

Ответ 1

    public String encrypt(String str) {
        try {
            // Encode the string into bytes using utf-8
            byte[] utf8 = str.getBytes("UTF8");

            // Encrypt
            byte[] enc = ecipher.doFinal(utf8);

            // Encode bytes to base64 to get a string
            return new sun.misc.BASE64Encoder().encode(enc);
        } catch (javax.crypto.BadPaddingException e) {
        } catch (IllegalBlockSizeException e) {
        } catch (UnsupportedEncodingException e) {
        } catch (java.io.IOException e) {
        }
        return null;
    }

    public String decrypt(String str) {
        try {
            // Decode base64 to get bytes
            byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);

            // Decrypt
            byte[] utf8 = dcipher.doFinal(dec);

            // Decode using utf-8
            return new String(utf8, "UTF8");
        } catch (javax.crypto.BadPaddingException e) {
        } catch (IllegalBlockSizeException e) {
        } catch (UnsupportedEncodingException e) {
        } catch (java.io.IOException e) {
        }
        return null;
    }
}

Вот пример, который использует класс:

try {
    // Generate a temporary key. In practice, you would save this key.
    // See also Encrypting with DES Using a Pass Phrase.
    SecretKey key = KeyGenerator.getInstance("DES").generateKey();

    // Create encrypter/decrypter class
    DesEncrypter encrypter = new DesEncrypter(key);

    // Encrypt
    String encrypted = encrypter.encrypt("Don't tell anybody!");

    // Decrypt
    String decrypted = encrypter.decrypt(encrypted);
} catch (Exception e) {
}

Ответ 2

У меня возникло сомнение в том, что зашифрованный текст будет одинаковым для одного текст, когда шифрование выполняется несколькими раз на один и тот же текст

Это сильно зависит от используемого алгоритма криптографии:

  • Одна из целей некоторых/самых (зрелых) алгоритмов заключается в том, что зашифрованный текст отличается при двойном шифровании. Одной из причин этого является то, что злоумышленник, как известно, простой и зашифрованный текст не может вычислить ключ.
  • Другой алгоритм (в основном, односторонние крипто хэши), такие как MD5 или SHA, основанный на факте, что хэшированный текст одинаков для каждого шифрования/хэша.

Ответ 3

Зашифровано ли одно и то же, если простой текст зашифрован одним и тем же ключом зависит от алгоритма и протокола. В криптографии есть вектор инициализации IV: http://en.wikipedia.org/wiki/Initialization_vector, который используется с различными шифрами, делает тот же простой текст, зашифрованный одним и тем же ключом, дает различные шифровальные тексты.

Я советую вам прочитать больше о криптографии в Википедии, Брюс Шнайер http://www.schneier.com/books.html и "Начало криптографии с Java" Дэвида Хука. Последняя книга полна примеров использования библиотеки http://www.bouncycastle.org.

Если вы интересуетесь криптографией, есть CrypTool: http://www.cryptool.org/ CrypTool - бесплатное приложение для электронного обучения с открытым исходным кодом, используемое во всем мире в реализации и анализе криптографических алгоритмов.

Ответ 4

DES Простое рабочее шифрование

Требуется рабочий класс DES. this Блог.