Зашифровать и расшифровать строку в Java - PullRequest
12 голосов
/ 20 декабря 2010

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

Ответы [ 3 ]

21 голосов
/ 20 декабря 2010
    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 голосов
/ 20 декабря 2010

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

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

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

То, будет ли зашифровано то же самое, когда обычный текст зашифрован тем же ключом, зависит от алгоритма и протокола.В криптографии есть вектор инициализации 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 является бесплатным, открытымприложение для электронного обучения, используемое во всем мире для реализации и анализа криптографических алгоритмов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...