web-dev-qa-db-fra.com

Crypter le texte en AES / CBC / PKCS7Padding

Je développe une application web pour crypter certains textes avec Java 6.

Le crypté que je dois faire est un AES (Rijndael) en mode CBC avec un remplissage PKCS7 et une clé de 128 bits.

J'ai vu un article qui explique comment chiffrer de la même manière que je dois le faire, mais avec le rembourrage PKCS5.

Le lien de l'article est ici:

https://bit502.wordpress.com/2014/06/27/codigo-Java-encriptar-y-desencriptar-texto-usando-el-algoritmo-aes-con-cifrado-por-bloques-cbc- de-128 bits /

Je change

private final static String cI = "AES/CBC/PKCS5Padding";

À

private final static String cI = "AES/CBC/PKCS7Padding";

Mais Java n'a pas pu trouver de fournisseur pour cela.

Quelqu'un pourrait-il me dire comment je dois faire?

11
Shanty

Java fournit uniquement le remplissage PKCS # 5, mais c'est la même chose que le remplissage PKCS # 7. Voir cette question sur Crypto.SE:

Quelle est la différence entre le remplissage PKCS # 5 et le remplissage PKCS # 7

Ils sont interchangeables pour les chiffrements de blocs communs comme AES et DES.

18
Artjom B.

Essayez cette méthode

String KEY_AES = "**************";
public String encrypt(String value) {
        try {
            byte[] key = KEY_AES.getBytes("UTF-8");
            byte[] ivs = KEY_AES.getBytes("UTF-8");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
            AlgorithmParameterSpec paramSpec = new IvParameterSpec(ivs);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, paramSpec);
            return Base64.encodeToString(cipher.doFinal(value.getBytes("UTF-8")), Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
3
Erick Martinez

La spécification Java répertorie un certain nombre de modes de chiffrement (et remplissages) qui doivent être pris en charge. PKCS7Padding n'est pas inclu.

Ce sont les modes AES/CBC que toute implémentation Java doit prendre en charge.

  • AES/CBC/NoPadding (clé 128 bits)
  • AES/CBC/PKCS5Padding (clé 128 bits)

(Voir cette réponse pour plus d'informations)

Bouncy Castle a cependant ce dont vous avez besoin.

2