DES в режиме CBC должен быть пойман или выдан ошибка - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь выяснить, почему мой код DES для режима cbc не работает. Я получаю сообщение об ошибке: error: незарегистрированное исключение NoSuchProviderException;должен быть перехвачен или объявлен как выброшенный desCipher = Cipher.getInstance ("DES / CBC / PKCS5Padding", "CB");

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 JEncrytion
{    
    public static void main(String[] argv) {

        try{

        KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
        SecretKey myDesKey = keygenerator.generateKey();

        Cipher desCipher;

        // Create the cipher 
        desCipher = Cipher.getInstance("DES/CBC/PKCS5Padding", "CB");

        // Initialize the cipher for encryption
        desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);

        //sensitive information
        byte[] text = "hello world how are you".getBytes();

        System.out.println("Text [Byte Format] : " + text);
        System.out.println("Text : " + new String(text));

        // Encrypt the text
        byte[] textEncrypted = desCipher.doFinal(text);

        System.out.println("Text Encryted : " + textEncrypted);

        // Initialize the same cipher for decryption
        desCipher.init(Cipher.DECRYPT_MODE, myDesKey);

        // Decrypt the text
        byte[] textDecrypted = desCipher.doFinal(textEncrypted);

        System.out.println("Text Decryted : " + new 
String(textDecrypted));

    }catch(NoSuchAlgorithmException e){
        e.printStackTrace();
    }catch(NoSuchPaddingException e){
        e.printStackTrace();
    }catch(InvalidKeyException e){
        e.printStackTrace();
    }catch(IllegalBlockSizeException e){
        e.printStackTrace();
    }catch(BadPaddingException e){
        e.printStackTrace();
    } 
}
}

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Вам не нужно использовать провайдера CB в Cipher.getInstance(). Таким образом, вы больше не получите NoSuchProviderException.

Просто посмотрите код ниже, он отлично работает.

import java.security.InvalidKeyException;
import java.security.InvalidAlgorithmParameterException;
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.spec.IvParameterSpec;
import javax.crypto.SecretKey;

public class JEncryption
{    
    public static void main(String[] argv) {

    try{

        KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
        SecretKey myDesKey = keygenerator.generateKey();

        Cipher desCipher;

        // Create the cipher 
        desCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        // Initialize the cipher for encryption
        desCipher.init(Cipher.ENCRYPT_MODE, myDesKey,iv);

        //sensitive information
        byte[] text = "hello world how are you".getBytes();

        System.out.println("Text [Byte Format] : " + text);
        System.out.println("Text : " + new String(text));

        // Encrypt the text
        byte[] textEncrypted = desCipher.doFinal(text);

        System.out.println("Text Encryted : " + textEncrypted);
        // Initialize the same cipher for decryption
        desCipher.init(Cipher.DECRYPT_MODE, myDesKey,iv);

        // Decrypt the text
        byte[] textDecrypted = desCipher.doFinal(textEncrypted);

        System.out.println("Text Decryted : " + new String(textDecrypted));

     }catch(NoSuchAlgorithmException e){
         e.printStackTrace();
     }catch(NoSuchPaddingException e){
         e.printStackTrace();
     }catch(InvalidKeyException e){
         e.printStackTrace();
     }catch(InvalidAlgorithmParameterException e){
         e.printStackTrace();
     }catch(IllegalBlockSizeException e){
         e.printStackTrace();
     }catch(BadPaddingException e){
         e.printStackTrace();
     } 
  }
}
0 голосов
/ 02 октября 2019

Делайте то, что говорится в сообщении - объявляйте исключение:

public static void main(String[] argv) throws Exception {

В вашем случае достаточно общего исключения.

...