Codificando para base32 a partir do shell

7

Estou procurando codificar uma string de entrada para a codificação base32 diretamente do shell. Eu estou olhando para fazer isso no Ubuntu, mas imagino sabor não importa particularmente aqui.

Existe alguma ferramenta linux / unix existente para simplesmente fazer isso?

Algo ao longo das linhas de:

-bash-3.2$ echo -n 'hello' | base32
    
por jdev 04.05.2012 / 22:53

4 respostas

9

Hmm, uma pesquisa rápida de pacotes não oferece nada como um único utilitário autônomo.

Por outro lado, isso mostra que há uma biblioteca Perl apropriada e é fácil o suficiente para criar um script perl rápido. Algo como:

$ sudo apt-get install libmime-base32-perl

E, em seguida, um script como base32enc.pl :

#!/usr/bin/perl

use MIME::Base32 qw( RFC );

undef $/;  # in case stdin has newlines
$string = <STDIN>;

$encoded = MIME::Base32::encode($string);

print "$encoded\n";

Então:

$ echo -n "hello" | ./base32enc.pl
NBSWY3DP

A entrada CPAN relativamente escassa é: link

Assim, uma alteração menor permitirá que você decodifique também.

    
por 04.05.2012 / 23:09
2

Apenas uma melhoria da excelente resposta do cjc, para que possamos ter um utilitário base32 , que funciona de forma semelhante ao base64 na forma como podemos codificar e decodificar:

#! /usr/bin/perl

use MIME::Base32;
use strict;

undef $/;

my $string = <STDIN>;
my $changed;

if ( $ARGV[0] eq "-d" ){
        $changed = MIME::Base32::decode($string);
}else{
        $changed = MIME::Base32::encode($string); 
}

if ( $changed =~ /\n$/ ) {
    printf $changed;
}else{
    printf $changed . "\n";
}

Teste:

$ base32 < <(echo -n 'abcdef')
MFRGGZDFMY
$ base32 -d < <(echo  'MFRGGZDFMY')
abcdef
    
por 06.12.2015 / 21:44
1

Ele é instalado por padrão no Ubuntu 16.04 como parte do coreutils :

$ which base32
/usr/bin/base32
    
por 10.04.2018 / 19:28
0
  1. Instale perl-MIME-Base32.noarch :

    yum install perl-MIME-Base32.noarch
    
  2. Salve o script no bas32 filename:

    #!/usr/bin/perl
    
    use MIME::Base32 qw( RFC );
    
    undef $/;  # in case stdin has newlines
    $ed=$ARGV[0];
    $string=$ARGV[1];
    if ($ed eq "-e")
    {
    $encoded = MIME::Base32::encode($string);
    print "$encoded\n";
    }
    elsif ($ed eq "-d")
    {
    $decoded = MIME::Base32::decode($string);
    print "$decoded\n";
    }
    else { print " please pass option also\n";
    exit;
    }
    
    chmod +x base32
    cp base32 /usr/bin/
    base32 -e string
    base32 -d "any encoded value"
    
por 24.09.2016 / 11:56