Шифровать/дешифровать ECB/PKS5/Blowfish между AS3Crypto и Javax.Crypto завершается с ошибкой с ошибкой заполнения
-
22-08-2019 - |
Вопрос
У меня есть секретный ключ, который был отправлен мне в виде файла, поэтому я могу зашифровать некоторые данные XML с помощью Blowfish.Как мне получить доступ к ключу, чтобы использовать его с AS3Crypto?Я предполагаю, что мне нужно встроить его с помощью метатега [Embed].Это mimeType="application/octet-stream", но я не уверен, правильно ли это.Как мне встроить этот файл и затем ссылаться на него как на секретный ключ?XML-файлы, которые я шифрую, невозможно расшифровать на стороне Java.Каждая попытка завершается неудачно с этим исключением:
javax.crypto.BadPaddingException:Данный последний блок не дополнен должным образом.
В качестве бонуса, если у кого-то есть опыт использования библиотеки для работы с реализацией Java и он знает идеальный режим/дополнение/IV для использования, это было бы здорово.Спасибо!
//keyFile is an embedded asset. I was given a file to use as the key
var kdata:ByteArray = new keyFile() as ByteArray;
//Convert orderXML to Base64
var orderData:ByteArray = Base64.decodeToByteArray(String(orderXML));
//Cipher name
var cname:String = "simple-blowfish-ecb";
var pad:IPad = new PKCS5;
var mode:ICipher = Crypto.getCipher(cname, kdata, pad);
//not sure if this is necessary. seems to be also set in mode
pad.setBlockSize(mode.getBlockSize());
mode.encrypt(orderData);
var transmitXML:String = Base64.encodeByteArray(orderData);
//DEBUG: Output to TextArea
storePanel.statusBox.text += "\n--TRANSMIT--\n"+transmitXML;
Решение
Не знаю, не знаете ли вы, как вставлять двоичные данные, но вы правы насчет использования [Embed]
тег (это, безусловно, один из хороших способов сделать это).
Я часто вставляю вот так:
[Embed(source="myKeyFile.key", mimeType="application/octet-stream")]
private const _KeyFile:Class;
private var keyFile:ByteArray = new _KeyFile();
...
trace(keyFile.length + " bytes"); // XYZ bytes
Больше информации:http://dispatchevent.org/roger/embed-almost-anything-in-your-swf/