Изменить образец кода, чтобы указать значение ключа DES

1

У меня есть пример рабочего кода, который использует DES (см. Ниже), но я хочу указать ключевые данные для использования. Как я могу отредактировать образец кода, чтобы сделать это?

import java.security.InvalidKeyException;  
import java.security.NoSuchAlgorithmException;    
import javax.crypto.BadPaddingException;  
import javax.crypto.Cipher;  
import javax.crypto.IllegalBlockSizeException;  
import javax.crypto.KeyGenerator;  
import javax.crypto.NoSuchPaddingException;  
import javax.crypto.SecretKey;

public class DESEncryptionDecryption {

private static Cipher encryptCipher;  
private static Cipher decryptCipher; 
public static void main(String[] args) {  
try {
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");  
SecretKey secretKey = keygenerator.generateKey();  

encryptCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  
encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey);  
byte[] encryptedData = encryptData("Classified Information!");  

decryptCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  
decryptCipher.init(Cipher.DECRYPT_MODE, secretKey);  
decryptData(encryptedData);
}}}
  • 0
    Почему вы удалили свои предложения catch ? Ваш пример кода не компилируется.
  • 0
    использовал catch в моей программе в lappy .. просто сюда не вставил, чтобы уменьшить размер кода.
Теги:
key
encryption
security
des

1 ответ

1
Лучший ответ

Не используйте KeyGenerator, используйте SecretKeyFactory:

String desKey = "0123456789abcdef"; // value from user  
byte[] keyBytes = DatatypeConverter.parseHexBinary(desKey);

SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey key = factory.generateSecret(new DESKeySpec(keyBytes));

Обратите внимание, что DES не является безопасным алгоритмом. Рассмотрим использование AES или Triple DES (DESede).


Для DESede:

String desKey = "0123456789abcdef0123456789abcdef0123456789abcdef"; // user value (24 bytes)  
byte[] keyBytes = DatatypeConverter.parseHexBinary(desKey);

SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
SecretKey key = factory.generateSecret(new DESedeKeySpec(keyBytes));

Для AES просто выполните:

String aesKey = "0123456789abcdef0123456789abcdef"; // user value (16/24/32 bytes)
byte[] keyBytes = DatatypeConverter.parseHexBinary(aesKey);
SecretKey key = new SecretKeySpec(keyBytes, "AES"); 
  • 0
    для AES или Triple DES (DESede), мне просто нужно заменить DES на AES / DESede в этой строке? никаких других изменений не требуется? SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
  • 0
    SecretKeyFactory работает хорошо согласно вашему коду. спасибо за это
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню