Разный результат шифрования

125
19 сентября 2019, 14:40

Шифрую строку в java и javascript. Использую одинаковые настройки, ключ, вектор, метод и т.д.

String s = "qwerty";
             IvParameterSpec iv = new IvParameterSpec("1234567891234567".getBytes("UTF-8"));
            //генирируем случайный АЕС ключ
            Cipher cipher = (Cipher) Cipher.getInstance("AES/CFB/PKCS7Padding");
            //  KeyGenerator kgen = KeyGenerator.getInstance("AES");
            //kgen.init(256);
            //SecretKey key = kgen.generateKey();
            byte[] key = ("ytrewq").getBytes();
            //key = Arrays.copyOf(key, 16); // use only first 128 bit

            SecretKey secretKey = new SecretKeySpec(key,"AES");
            cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);
            byte[] bytes = cipher.doFinal(s.getBytes());
            String loadCriptLogin = android.util.Base64.encodeToString(bytes, android.util.Base64.DEFAULT);
            System.out.println(loadCriptLogin);

код яваскрипт

var text = "qwerty"; 
var Key = CryptoJS.enc.Hex.parse("ytrewq"); 
var IV = CryptoJS.enc.Hex.parse("1234567891234567"); 
var encryptedText = CryptoJS.AES.encrypt(text, Key, {iv: IV, mode: CryptoJS.mode.CFB, padding:  CryptoJS.pad.Pkcs7}); 

Но на выходе получаю разные зашифрованые строки, в чем может быть проблема?

Answer 1

Спасибо всем кто откликнулся. В вопросе разобрался. Вот java и js код, может кому то поможет.

 <script src="crypto-js.js"></script>

<script>
//var key = CryptoJS.lib.WordArray.random(16);
       // var iv= CryptoJS.lib.WordArray.random(16);
var key = CryptoJS.enc.Utf8.parse('ytrewqqwerty1234');
var iv  = CryptoJS.enc.Utf8.parse('1234567891234567');
        var message = "qwerty";
        var encrypted = CryptoJS.AES.encrypt(message, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7  });
        var cipherData = iv.toString(CryptoJS.enc.Base64)+":"+encrypted+":"+key.toString(CryptoJS.enc.Base64);
        console.log(cipherData);
</script>

ява код

  String ivstr = "MTIzNDU2Nzg5MTIzNDU2Nw=="; // вектор в бэйсе
            String s = "qwerty"; //строка которую шифруем
            String keyString = "eXRyZXdxcXdlcnR5MTIzNA=="; // ключ в бэйсе
            byte[] ivS = Base64.decode(ivstr, Base64.DEFAULT);
            byte[] keyB = Base64.decode(keyString, Base64.DEFAULT);
            IvParameterSpec iv = new IvParameterSpec(ivS);
            Key k = new SecretKeySpec(keyB, "AES");

        Cipher cipher = null;
        try {
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, k,iv);
            byte[] bytes = cipher.doFinal(s.getBytes("UTF-8"));
            String loadCriptLogin = android.util.Base64.encodeToString(bytes, Base64.DEFAULT);
            System.out.println(loadCriptLogin);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }

    }
READ ALSO
Как указать тип для массива, который состоит из строк являющихся свойствами объекта?

Как указать тип для массива, который состоит из строк являющихся свойствами объекта?

Подскажите, пожалуйста, можно ли как то в TypeScript указать тип для массива, таким образом, что бы описать, что он может состоять только из тех...

150
Canvas | Javascript игра

Canvas | Javascript игра

Управляешь самолетом и собираешь топлива, каждая собранная соплива увеличивает счетчик топлива до 10(единица топлива дает 1сек полета)Нужно...

136
Настройка HTML формы Яндекс Кассы. Копирование элементов формы в ключ JSON

Настройка HTML формы Яндекс Кассы. Копирование элементов формы в ключ JSON

Копирование данных из нескольких полей формы в значения ключа JSON

142
Протаскивания ползунка в webdriver.io

Протаскивания ползунка в webdriver.io

Случай такой: значение input задается путем перемещения кастомного ползунка, который может находиться где угодноЕсть ли способ протаскивания...

208