Шифрование в Java и Flex

Я хочу зашифровать и расшифровать строку tp с определенной солью. Но результат должен быть одинаковым, если код выполняется в java и adobe flex. Основная цель: приложение в adobe flex будет генерировать строку, которую можно будет расшифровать на сервере с помощью java.

Я использую эту гибкую библиотеку http://crypto.hurlant.com/demo/.

Попробуйте открыть вкладку «Секретный ключ». Я хочу использовать шифрование AES, «CBC» или «PKCS5».

var k:String = "1234567890123456";
var kdata:ByteArray = Hex.toArray(k);
var txt:String = "hello";
var data:ByteArray = Hex.toArray(Hex.fromString(txt));;
var name:String = "simple-aes-cbc";
var pad:IPad =new PKCS5();
var mode:ICipher = Crypto.getCipher(name, kdata, pad);
pad.setBlockSize(mode.getBlockSize());
mode.encrypt(data);
encrypted.text=Hex.fromArray(data);
trace(Hex.fromArray(data));

А вот код на java

String plaintext = "hello";
String key = "1234567890123456";

SecretKey keyspec = new SecretKeySpec(key.getBytes(), "AES");       

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,keyspec);
byte[] encrypted = cipher.doFinal(plaintext.getBytes());

BASE64Encoder base64 = new BASE64Encoder();
String encodedString = base64.encode(encrypted);

System.out.println(encodedString);

Почему результат не тот? Можете ли вы, ребята, предоставить образец с одинаковым результатом как для java, так и для flex (шифрование и дешифрование)? А если я хочу изменить параметр, например, с cbc на ebc, какую строку нужно изменить?

Спасибо!


person Jef    schedule 16.12.2009    source источник


Ответы (2)


«Простой» режим шифрования (simple-aes-cbc) использует случайный вектор инициализации, который меняется каждый раз, когда вы его используете, даже если ваш секретный ключ один и тот же.

Если вы хотите гарантировать одинаковые результаты при использовании одного и того же ключа, вы должны использовать «aes-cbc». Кроме того, вы должны вручную установить IV на шифре:

var ivmode:IVMode = mode as IVMode;
ivmode.IV = "some string guaranteed to be constant"

IV можно сделать зависимым от чего-то вроде userId, что делает шифрование повторяемым для одного и того же пользователя.

Вы должны рассмотреть, как это повлияет на вашу схему безопасности.

person Goran    schedule 16.12.2009
comment
Когда я пытаюсь использовать var ivmode:IVMode = mode как IVMode, он показывает нулевой результат, и я пытаюсь с «простым» или без него, он все равно дает тот же результат. - person Jef; 16.12.2009
comment
Я решил эту проблему, как указано выше. Вы можете проверить исходный код библиотеки hurlan по адресу crypto.hurlant.com/demo/srcview/index. HTML. Они реализовали тот же метод. - person Goran; 16.12.2009

Похоже, я не конвертирую сначала в шестнадцатеричный код в java, когда передаю ключ. И так далее, когда получаю результат byteArray в adobe flex, в java снова не привожу.

Вот что я понял, когда увидел код Аркадио. Спасибо.

person Jef    schedule 16.12.2009