48-битная рыбка - PullRequest
       39

48-битная рыбка

1 голос
/ 07 декабря 2009

Существует ли реализация (Java / C ++ / Ruby) алгоритма Blowfish, который поддерживает 48-битные блоки данных? У меня проблема с шифрованием, когда входной и выходной каналы ровно 48 бит. Все реализации в сети предназначены для 64-битных блоков.

Ответы [ 3 ]

3 голосов
/ 07 декабря 2009

Это потому, что Blowfish имеет установленный размер блока в 64 бита. Вы можете заполнить два случайных байта до конца ваших данных.

require 'rubygems'
require 'crypt/blowfish'
blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
plain="123456"
encryptedBlock = blowfish.encrypt_block(plain+(rand(250)+5).chr+(rand(250)+5).chr)

или если ваш plain может быть меньше 6 байт / 48 бит

encryptedBlock = blowfish.encrypt_block(plain.ljust(8))
2 голосов
/ 07 декабря 2009

Вы можете использовать противо-режим с blowfish. Просто помните, что никогда не следует повторно использовать какое-либо значение счетчика.

Просто выберите счетчик (он должен быть уникальным для всех шифрований с одним и тем же ключом), добавьте счетчик до 64 бит и зашифруйте заполненный счетчик. Затем XOR первые 48 бит этого шифрования с вашим открытым текстом, чтобы получить зашифрованный текст. Повторите операцию для зашифрованного текста для расшифровки.

Единственная проблема - найти подходящий счетчик. Если вы включите его в зашифрованный текст, вам потребуется более 48 бит. Возможно, у вас есть идентификатор сессии или что-то, что вы можете использовать?

1 голос
/ 17 декабря 2009

Я рекомендую использовать RC4-drop 1024. RC4 - это потоковый шифр, поэтому вы можете зашифровать произвольный размер, если сообщение меньше 48 байт, то вы можете заполнить его нулями. Удаление 1024 означает, что вы отбрасываете первые 1024 байта потока PRNG, чтобы сделать это, вы можете зашифровать 1024 байта мусора при первом его использовании.

Шифрование потока сообщений BitTorrent использует RC4-drop 1024, и вот реализация Python, использующая библиотеку ARC4:

http://google.com/codesearch/p?hl=en#4FSOSMZ6Pxc/distfiles/BitTorrent-5.0.7.tar.gz|eyN-AXYL_0E/BitTorrent-5.0.7/BitTorrent/Connector.py&q=lang:python%20%22ARC4.new%22

...