String Encryption / Decryption класс, который производит различный вывод - PullRequest
2 голосов
/ 27 февраля 2012

Я использую класс шифрования / дешифрования строк Java, полученный из Интернета!Вот класс с небольшими изменениями:

открытый класс EncrypterDecrypter {Cipher ecipher;Cipher dcipher;

EncrypterDecrypter(SecretKey key)
{
    try {
        ecipher = Cipher.getInstance("DES");
        dcipher = Cipher.getInstance("DES");
        ecipher.init(Cipher.ENCRYPT_MODE, key);
        dcipher.init(Cipher.DECRYPT_MODE, key);

    } catch (javax.crypto.NoSuchPaddingException e) {
    } catch (java.security.NoSuchAlgorithmException e) {
    } catch (java.security.InvalidKeyException e) {
    }
}   

}

открытый класс EncryptionTester {

public static void main(String[] args)
{
    try
    {
        //Generate a temporary key.
        SecretKey key = KeyGenerator.getInstance("DES").generateKey();

        //Create Encrypter/Decrypter class
        EncrypterDecrypter crypto = new EncrypterDecrypter(key);

        //More lines of code to use crypto object
    }
     catch (Exception e)
     {
     } 
}

}

Моя проблема заключается в том, что каждый раз, когда я создаю новый экземпляркласса EncrypterDecrypter я получаю другую зашифрованную строку, но строка для шифрования остается той же!Мой разум говорит мне, что проблема заключается в объекте SecretKey, который постоянно меняется каждый раз, когда создается новый экземпляр, я хотел бы знать, как я могу сделать объект SecretKey одинаковым для всех экземпляров класса Encrypter / Decrypter, если это будетпричина проблемы!

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Если вы использовали пакет javax.crypto, то методы шифрования и дешифрования выглядят нормально. Попробуйте сгенерировать свой ключ так:

final SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
final SecretKey key = skf.generateSecret(new DESKeySpec(new byte [] {/*The key*/}));
instance.EncrypterDecrypter(key);                     //Initialization of your Cipher objects
String encrypted = instance.encrypt("This is a test");
System.out.println(instance.decrypt(encrypted));      //"This is a test"

Ты должен что-то сделать в ловушках.

1 голос
/ 27 февраля 2012

Генерация SecretKey из байтового массива ..

byte raw[] = new byte[]{0x001,0x002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002};
        SecretKeySpec spec = new SecretKeySpec(raw, "DES");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...