вторник, 29 июня 2010 г.

Освоение криптографии - 2: алгоритм Blowfish

Использование DES-шифрования, описанного в предыдущем посте весьма удобно, но оправдано далеко не всегда. Например, если передаваемые данные нужно защитить "с гарантией" или ключ меняется достаточно редко, использовать алгоритм такой стойкости уже нежелательно. Тем более, что смена алгоритма при нынешнем уровне развития платформ не требует больших усилий. Альтернативой устаревшему уже в начале века DES выбираем Blowfish. Он достаточно быстрый и, также являясь симметричным алгоритмом, не требует принципиальной престройки взаимодействия клиента с сервером.
Для реализации шифрования используем те же библиотеки, что и раньше. В случае flex-части вообще изменится только одна строчка кода:
var cipher:ICipher = Crypto.getCipher("blowfish-ecb", key);
В случае java всё немного сложнее...
Во-первых
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("Blowfish");
уже не сработает. SecretKeyFactory не может порождать ключи такого типа. Это решается достаточно просто, ключи делаем так:
key = new SecretKeySpec(keystr.getBytes(), "Blowfish");
Тут keystr - наш секретный пароль. Остальной код оставляем как в прошлом посте. Компилируем, запускаем, и... получаем Exception: Illegal key size. Очевидный путь наращивания длины ключа тут не поможет. Не в моём случае, по крайней мере. Помогло другое: Скачиваем отсюда так называемые "Unlimited Strength Jurisdiction Policy Files". Это 2 jar-ника, которыми можно заменить аналогичные файлы в java-машине, "ослабив" при этом политику безопасности до нужного нам уровня. Файлы, которые следует заменить в моём случае лежат тут: /usr/lib/jvm/java-6-sun/jre/lib/security. Старые, после окончания экспериментов лучше вернуть на место ;)

Комментариев нет:

Отправить комментарий