2011-03-29 4 views
2

이 어제부터 내 질문과 관련된 문자열을 반환 (좋은 결과 가지고있는) : Encrypting a string with Blowfish in ruby returns a shorter string than the same process in php은 1/2

를 이제 나는 비슷한 문제가 무엇을 믿는해야 반대 방향. 나는 문자열을 암호화하기 위해 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 

이것은 정확히 예상되는 결과이다. 어리석은 것은 내가 지금 뭘하는지

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" 

어떤 생각 : 나는 루비에서 문자열을 해독 할 때 그러나 그것은 단지 나 입력의 부분 집합 준다?

+0

? 새로운 디자인은 AES, 더 안전한 (시작을위한 더 긴 블록 크기, 그리고 더 잘 연구 된 방법) 그리고 더 많은 CPU 하드웨어 지원을 얻음으로써 매일 더 많은 컴퓨터에서 가장 빠른 솔루션이되어야합니다. –

답변

6

복어 블록은 8-bytes long입니다. 이는 정확히 한 블록의 암호 해독을 요청할 때 되돌려주는 문자 수입니다.

마지막 블록을 가져 오는 데 더 많은 코드가 있어야하며, 다음 8 바이트에서 decrypt_block을 다시 호출해야합니다.

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) 
+0

자바 블로우 피쉬가 암호화 된 문자열을 가지고 있지만 bf.decrypt_string을 호출 한 후에 루비에서 ""\ ve \ xC7 \ xBD \ xB4 \ ...와 같은 긴 문자열을 얻습니다. "그래서 자바와 루비 복어 – KullDox