спасибо за ссылку AES Calc. Очень удобно

аюсь написать простую программу на Java, которая будет шифровать обычный текстAES-256-CBC, Есть класс:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AesCBC {
    private byte[] key;
    private byte[] iv;

    private static final String ALGORITHM="AES";

    public AesCBC(byte[] key, byte[] iv) {
        this.key = key;
        this.iv = iv;
    }

    public byte[] encrypt(byte[] plainText) throws Exception{
        SecretKeySpec secretKey=new SecretKeySpec(key,ALGORITHM);
        IvParameterSpec ivParameterSpec=new IvParameterSpec(iv);
        Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivParameterSpec);
        return cipher.doFinal(plainText);
    }

    public byte[] getKey() {
        return key;
    }

    public void setKey(byte[] key) {
        this.key = key;
    }

    public byte[] getIv() {
        return iv;
    }

    public void setIv(byte[] iv) {
        this.iv = iv;
    }
}

И есть возможность использования:

byte[] test="a".getBytes();

byte[] key=DatatypeConverter.parseHexBinary("b38b730d4cc721156e3760d1d58546ce697adc939188e4c6a80f0e24e032b9b7");
byte[] iv=DatatypeConverter.parseHexBinary("064df9633d9f5dd0b5614843f6b4b059");
AesCBC aes=new AesCBC(key,iv);
try{
    String result=DatatypeConverter.printBase64Binary(aes.encrypt(test));
    System.out.println(result);
}catch(Exception e){
    e.printStackTrace();
}

Мой выводVTUOJJp38Tk+P5ikR4YLfw==, но когда я выполняю эту команду:

/usr/bin/openssl enc -A -aes-256-cbc -base64 -K "b38b730d4cc721156e3760d1d58546ce697adc939188e4c6a80f0e24e032b9b7" -iv "064df9633d9f5dd0b5614843f6b4b059" <<< "a"

Я получаю что-то другое, чем в программе Java (Y65q9DFdR3k1XcWhA2AO2Q== ). К сожалению, я понятия не имею, почему результаты не совпадают, так как я использую один и тот же алгоритм с тем же ключом и iv. Означает ли это, что моя Java-программа не работает должным образом? Любая помощь будет оценена.

 Jamie19 окт. 2017 г., 19:19
Вы пытались расшифровать вывод Java, используя Java и / или OpenSSL? Если вы снова зашифруете с помощью OpenSSL, получите ли вы тот же вывод? Согласно странице помощи openssl в нижней части (wiki.openssl.org/index.php/Enc), "также все варианты соления устарели." Я считаю, что если вы используете ключ, OpenSSL всегда будет засорять ваши результаты.

Ответы на вопрос(2)

AES CALCULATOR.

Таким образом, шифрование командной строки openssl некорректно, внимательно прочитайте справочную страницу.

Обратите внимание, что я добавил отступы PKCS # 7 вручную к входным данным.
ТакжеVTUOJJp38Tk+P5ikR4YLfw== в шестнадцатеричном виде55350E249A77F1393E3F98A447860B7F

 Suresh23 апр. 2018 г., 18:32
спасибо за ссылку AES Calc. Очень удобно
Решение Вопроса

Синтаксис строки здесь (<<<) добавляет новую строку в строку. Таким образом, вывод Java является результатом шифрования «a», а вывод командной строки является результатом шифрования «a \ n» (то есть символаa с последующим переводом строки).

Попробуйте это из командной строки:

printf "a" | /usr/bin/openssl enc -aes-256-cbc -base64 -K "b38b730d4cc721156e3760d1d58546ce697adc939188e4c6a80f0e24e032b9b7" -iv "064df9633d9f5dd0b5614843f6b4b059"

результатVTUOJJp38Tk+P5ikR4YLfw==, соответствующий вашему результату Java.

Ваш ответ на вопрос