Расшифровка зашифрованной строки blowfish в ruby ​​возвращает только 1/2 строки - PullRequest
2 голосов
/ 29 марта 2011

Это связано с моим вчерашним вопросом (который дал отличные результаты): Шифрование строки с Blowfish в ruby ​​возвращает более короткую строку, чем тот же процесс в php

Теперь у меня естьчто я считаю аналогичной проблемой в противоположном направлении.Я использую php для шифрования строки:

php > require_once 'Crypt/Blowfish.php';
php > $input = "input string";
php > $key = "some key";
php > $crypt = new Crypt_Blowfish($key);
php > echo bin2hex($crypt->encrypt($input));
79af8c8ee9220bdec2d1c9cfca7b13c6

И это именно ожидаемый результат.Однако, когда я пытаюсь расшифровать строку в ruby, она дает мне только подмножество ввода:

irb(main):001:0> require 'rubygems'
r=> true
irb(main):002:0> require 'crypt/blowfish'
=> true
irb(main):003:0> key = "some key"
=> "some key"
irb(main):004:0> input = "79af8c8ee9220bdec2d1c9cfca7b13c6"
=> "79af8c8ee9220bdec2d1c9cfca7b13c6"
irb(main):005:0> block = input.gsub(/../) { |match| match.hex.chr }
=> "y\257\214\216\351\"\v\336\302\321\311\317\312{\023\306"
irb(main):006:0> blowfish = Crypt::Blowfish.new(key)
=> #<Crypt::Blowfish:0xb73acbd8 @sBoxes=[[3156471959, 1769696695, 1443271708, 181204541, 
... 1894848609], @key="some key">
irb(main):008:0> blowfish.decrypt_block(block)
=> "input st"

Есть идеи, что я сейчас делаю глупо?

1 Ответ

6 голосов
/ 29 марта 2011

Блок раздува имеет длину 8 байт .Обратите внимание, что это именно то количество символов, которое вы получаете, когда просите расшифровать один блок.

Для получения последнего блока должно быть больше кода, или вам нужно снова вызвать decrypt_block для следующих 8 байтов.

Вместо вызова decrypt_block вы можете попробовать decrypt_string.

Из тестов:

userkey = "A BIG KEY"
bf = Crypt::Blowfish.new(userkey) 
string = "This is a string which is not a multiple of 8 characters long"
encryptedString = bf.encrypt_string(string)
decryptedString = bf.decrypt_string(encryptedString)
assert_equal(string, decryptedString)
...