2009-07-01 7 views
1

안녕하세요! 암호를 암호화하기 위해 Crypt::Blowfish_PPblowfish_PP 알고리즘을 사용하는 코드가 있습니다.Blowfish :: PP의 암호화는 왜 5 문자 만 인쇄합니까?

내가 ( 하지만 나는 키마다 나는 그것을 사용 을 증가합니다 나중에 함수를 만들 것입니다) 시작하기위한 샘플 "키"변수를 제공,하지만 지금은 이것에 대한 한

내가있어 무엇 :

use Crypt::Blowfish_PP; 

$key = "12345678"; 
$$plaintextBlock = "mystringhere"; 

$blowfish=new Crypt::Blowfish_PP($key); 

$ciphertextBlock=$blowfish->encrypt($plaintextBlock); 

$plaintextBlock=$blowfish->decrypt($ciphertextBlock); 

print "\n"; 
print $ciphertextBlock."\n"; 
print $plaintextBlock."\n"; 

$ciphertextBlock은 5 자까지만 출력합니다. MD5를 사용하여 다른 DB의 encryptedpassword을 검사했을 때 여러 문자가 포함되어 있습니다. 왜 그런가요? 무엇 내부에 encrypt()decrypt() 기능이 있습니까? "키"값은 암호화 된 암호의 길이에 따라 에 영향을 줍니까?

답변을 많이 주시면 감사하겠습니다. =)

답변

3

에 따르면, encryptdecrypt은 한 번에 8 바이트 블록 단위로만 작동합니다. 따라서 더 긴 문자열을 암호화하는 경우 encrypt 번을 반복해서 호출해야합니다.

암호 텍스트에 인쇄 할 수없는 문자가 포함되어 있기 때문에 5 문자 만 출력하는 이유 일 수 있습니다. 데이터를 인쇄하려면 예를 들어로 변환하십시오. 첫째 진수 ASCII :

print sprintf("%02x"x8, unpack("C8", $ciphertextBlock)), "\n"; 
2

laalto이 Blowfish_PP이 (가 _pp을의 IT는 복어 때문에,하지 때문에), 말했듯이 블록에 노력하고 있습니다.

대개 다루는 것이 복잡하기 때문에 Crypt::CBC 모듈은 (사실상) 블록 암호를 제공하는 Crypt :: * 모듈에 래퍼되어 훨씬 간단한 방법으로 사용할 수 있습니다.

예를 들어, 크립트 :: CBC와 코드는 다음과 같습니다

#!/usr/bin/perl -w 
use strict; 
use Crypt::CBC; 

my $key = "12345678"; 
my $plaintextBlock = "mystringhere"; 

my $cipher = Crypt::CBC->new(
    -key => $key, 
    -cipher => 'Blowfish_PP' 
); 

my $ciphertext = $cipher->encrypt($plaintextBlock); 
# my $textual = $ciphertext; 
# $textual =~ s/([^a-zA-Z0-9])/sprintf "\\x%02x", ord $1/ge; 
# print "ciphertext: [$textual]\n"; 
print "ciphertext: [$ciphertext]\n"; 

my $plaintext = $cipher->decrypt($ciphertext); 
print "plaintext: [$plaintext]\n"; 

는 암호문 바이트의 스트림 기억, 그래서 정말 인쇄 아니다. 암호문을 더 읽기 쉬운 방법으로 보여주기 위해 코드에서 3 줄의 문자를 해쉬 할 수 있습니다 (my $ textual = $ ciphertext로 시작).

Crypt :: CBC를 사용할 때의 또 다른 이점은 다른 알고리즘으로 전환하려는 경우 Crypt :: CBC-> new() 호출에서 단 하나의 변경 사항이라는 것입니다.

그건 그렇고 - 왜 Crypt :: Blowfish_PP? 내 말은, 왜 안 크립트 : 블로우 피쉬? _PP 버전은 일반적으로 단순히 느립니다. 우리가 크립트 :: Blowfish_PP 기능적으로 동등하다고 가정 할 수 직선 Crypt::Blowfish에서

추가 참고 :

모듈은 크립트 :: CBC와 을 사용 할 수 있습니다. 이 모듈을 암호 블록 연결 모드로 사용하려는 경우 에 Crypt :: CBC의 perldoc을 읽는 것이 좋습니다.실제로 에 이상의 데이터를 8 바이트의 데이터보다 더 암호화하려는 의도가 있거나 다른 블록 암호 인 경우 에 블록 연결 체인 유형이 필요합니다. Crypt :: CBC는 매우 인 경향이 있습니다. 으로 8 바이트를 암호화하지 않을 경우 데이터는 정확히 8 바이트 길이 여야합니다. 필요하면 채우기를하십시오. "\ 0" null 바이트로 완벽하게 사용할 수 있습니다.

2

변경 사항 $$ plaintextBlock을 $ plaintextBlock으로 변경하면 첫 번째 8 바이트에서 작동합니다.

관련 문제