2009-04-30 4 views
0

Ruby와 Crypt library을 사용하여 일반 텍스트를 인코딩하고 싶습니다. 그런 다음이 암호화 된 텍스트를 다른 데이터와 함께 XML 파일 내의 ASCII 16 진수 문자열로 전송하려고합니다. Blowfish로 인코딩 된 2 진 문자열을 Ruby에서 ASCII로 변환하려면 어떻게해야합니까?

나는이 다음 코드 :

require 'rubygems' 
require 'crypt/blowfish' 

plain = "This is the plain text" 
puts plain 

blowfish = Crypt::Blowfish.new("A key up to 56 bytes long") 
enc = blowfish.encrypt_block(plain) 
puts enc 

출력 :

This is the plain text 
????;

은 내가 enc.unpack()를 호출 할 필요가 생각하지만 난 압축 풀기 메소드 호출에 필요한 어떤 매개 변수가 없습니다 확신 .

답변

0

당신이 단지 읽을 수있는 ASCII 할 필요하거나 엄격 진수 할 필요 않는다는 것을 의미합니까 당신이 "ASCII 16 진수"를 말할
?

require 'rubygems' 
require 'crypt/blowfish' 

plain = "This is the plain text" 
puts plain 

blowfish = Crypt::Blowfish.new("A key up to 56 bytes long") 
enc = blowfish.encrypt_string(plain) 

hexed = '' 
enc.each_byte { |c| hexed << '%02x' % c } 

puts hexed 
# => 9162f6c33729edd44f5d034fb933ec38e774460ccbcf4d451abf4a8ead32b32a 

require 'base64' 

mimed = Base64.encode64(enc) 

puts mimed 
# => kWL2wzcp7dRPXQNPuTPsOOd0RgzLz01FGr9Kjq0ysyo= 
0

decrypt_string 및 그 대응 물인 encrypt_string을 사용하면 매우 쉽게 출력됩니다. :)


require 'rubygems' 
require 'crypt/blowfish' 

plain = "This is the plain text" 
puts plain 

blowfish = Crypt::Blowfish.new("A key up to 56 bytes long") 
enc = blowfish.encrypt_string(plain) 
p blowfish.decrypt_string(enc) 

또한, 크립트 라이브러리를 사용하여 속도 문제에 대해 이야기이 블로그 게시물을 발견 단지 참조 추가. :) http://basic70tech.wordpress.com/2007/03/09/blowfish-decryption-in-ruby/

+0

은 그 암호문 출력을 포함하는 버퍼를 촬영하는 방법 요청이 질문은, 내가 믿는 일반 텍스트 출력을 복구 할 수 있습니다 :

여기에 바이너리 데이터를 인코딩하기 위해 두 가지 방법을합니다. – animal

+0

그건 바로 holychao입니다. blowfish.encrypt_string()에 의해 생성 된 문자열은 제어 문자를 포함합니다. 이 문자열을 읽을 수있는 ASCII로 변환하고 싶습니다. – mlambie

+0

분명히 위의 목적을 이해하지 못한 채 크립트 소스를보고 올바른 값을 얻기 위해 N을 팩/언팩의 매개 변수로 사용하고있는 것 같습니다. 그러나 N을 사용하면 BigNum이 만들어지고 쉽게 16 진수로 변환 할 수 없습니다. 하지만 아래의 코드를 사용하면 암호화 된 문자열을 다른 인스턴스로 보낼 수 있습니다.

 tmp = env.unpack('N*') p blowfish.decrypt_string(tmp.pack('N*'))
이것이 도움이 될지 모르지만 행운을 빈다. :) – gaqzi