2017-11-22 1 views
2

나는 다음과 같은 명령을 사용하여 내 터미널에서 base58perl.pl 을 실행하려고 :디코딩 할 수 없습니다! 잘못된 Base58 문자!

perl base58perl.pl 

을하지만 다음과 같은 오류 얻을 :

my $fileSrc = 'base58.txt'; 
open my $fhSrc, $fileSrc or die "Could not open $fileSrc: $!"; 

my $fileDest = 'hex.txt'; 
open(my $fhDest, '>>', $fileDest) or die "Could not open file $fileDest: $!"; 

while (my $base58_encoded_address = <$fhSrc >) { 
    my $binary_address = decodebase58tohex($base58_encoded_address); 
    say $fhDest $binary_address; 
} 

close $fhSrc; 
close $fhDest; 
: 여기

Cannot decode! Invalid Base58 Character(s)! 

코드입니다

내용물 base58.txt은 base58 형식의 BTC 주소 목록입니다.

1E5PBfSaFawBy1RjBHkS6FDtCwXkYSsVTo 
1DCgptTS2uY2occbVdW1qcVT72T75RXbyg 
1CUNEBjYrCn2y1SdiUMohaKUi4wpP326Lb 

나는 여전히 같은 오류가 발생합니다 :

또한

chmod a+x base58perl.pl 
perl base58perl.pl 

base58.txt 내용을 시도했다.

+1

'decodebase58tohex' 함수는 어디에서 왔습니까? CPAN의 일부 모듈? 아니면 직접 쓰셨습니까? 오류 메시지는 매우 명확합니다. 입력 내용에 결함이 있습니다. – simbabque

+0

인터넷 검색이 저를 찾았습니다 http://lenschulwitz.com/b58/base58perl.txt, 그 이름을 가진 함수를 구현합니다. – simbabque

+0

[edit] 질문에 _base58.txt_의 내용을 포함하십시오. – simbabque

답변

0

오류 메시지는 연결된 코드의 unbase58 함수에서 온 것입니다.

die "Cannot Decode! Invalid Base58 Character(s)!\n" unless $bitcoin_address =~ /^[1-9A-HJ-NP-Za-km-z]*$/; 

입력이 문자 그룹 [1-9A-HJ-NP-Za-km-z]의 문자가 포함 된 경우 해당 광고 검사. 당신의 의견이 그렇듯이, 그것은 다른 것을 싫어해야합니다.

줄 끝에서 줄 바꿈 문자를 싫어하는 것 같습니다. 값을 decodebase58tohex으로 전달하기 전에 chomp이 필요합니다.

while(my $base58_encoded_address = <$fhSrc>) { 
    chomp $base58_encoded_address; 
    my $binary_address = decodebase58tohex($base58_encoded_address); 
    say $fhDest $binary_address; 
} 
+0

예'chomp'를 포함했지만 아직 동일한 오류를 반환합니다. –

+0

@Quin 그러면 데이터에 다른 데이터가 들어 있습니다. 다른 운영 체제의 파일입니까? 어쩌면 윈도우 라인 엔딩이 있고, 리눅스를 사용하고 있을까요? 그래픽 편집기를 사용하여 수동으로 새 파일 파일에 복사/붙여 넣기하십시오. 이는 종종 줄 끝을 수정하는 데 도움이됩니다. – simbabque

+0

Windows에 Perl을 설치하고 좋은 결과가 있는지 확인하십시오. –

0

아마도 공백을 제거해야합니다. 한 번에 문자열의 덩어리 만 디코드 함수에 전달하는 것으로 보이며 문제가 될 수도 있습니다. 전체 파일을 var로 읽어 들여 공백을 제거한 다음 디코딩하십시오. 이 스크립트는 이제 제대로 작동

my $base58_encoded_address = do { local $/; <$fhSrc> }; 
$base58_encoded_address =~ s/\s+//g; 
my $binary_address = decodebase58tohex($base58_encoded_address); 
say $fhDest $binary_address; 
+0

고마워요. 일종의 (오류 없음).하지만 같은 16 진수 출력을 던졌습니다. –

+0

같은 결과가 나옵니까? 출력이 잘못되었다고 생각한다는 것을 암시하고 있습니까? 그게 질문입니까? 문제에 대한 최소한의 실행 가능한 시연을 제공하기 위해 귀하의 질문을 아직 수정하지 않은 것을 봅니다 ([mcve] 참조). – ikegami

+0

해당 파일의 각 줄은 하나의 레코드를 나타내며 각 레코드를 개별적으로 변환하려고합니다. – simbabque

0

에 문제가있는 파일을 메모장을 사용하여 생성 된 base58.txt했다. 다른 텍스트 편집기를 사용하여 새 파일을 만들었습니다.

0
my $fileSrc = 'base58.txt'; 
open my $fhSrc, $fileSrc or die "Could not open $fileSrc: $!"; 

my $fileDest = 'hex.txt'; 
open(my $fhDest, '>>', $fileDest) or die "Could not open file $fileDest: $!"; 

my @tmp = <$fhSrc>; 
chomp @tmp; 
for my $line (@tmp) { 
    print "decoding '$line'\n"; 
    my $binary_address = decodebase58tohex($line); 
    say $fhDest $binary_address; 
} 

close $fhSrc; 
close $fhDest; 

다른 사람이 언급 한 것처럼 나는 공백을 다루는 것으로 생각합니다. chomp가 도움을 줄 것입니다.

할 일은 해독하려는 문자열을 인용 부호로 출력하는 것입니다. 이렇게하면 원하는 것을 해독 할 수 있는지 만 확인됩니다.

관련 문제