Codifica in base32 dalla shell


9

Sto cercando di codificare una stringa di input per la codifica base32 direttamente dalla shell. Sto cercando di farlo in Ubuntu, ma immagino che il sapore non sia particolarmente importante qui.

Esistono strumenti linux / unix esistenti per fare semplicemente questo?

Qualcosa sulla falsariga di:

-bash-3.2$ echo -n 'hello' | base32

Risposte:


10

Hmm, una rapida ricerca di pacchetti non fornisce nulla di simile a una singola utility autonoma.

D'altra parte, mostra che esiste una libreria Perl appropriata ed è abbastanza facile creare uno script perl veloce. Qualcosa di simile a:

$ sudo apt-get install libmime-base32-perl

E poi una sceneggiatura come 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";

Così:

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

La voce CPAN abbastanza scarsa è: http://search.cpan.org/~danpeder/MIME-Base32-1.01/Base32.pm

Quindi, una piccola modifica ti consentirà anche di decodificare.


2

Solo un miglioramento della risposta eccellente di cjc in modo che possiamo avere base32un'utilità che funziona in modo simile al base64modo in cui possiamo codificare e decodificare:

#! /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";
}

Test:

$ base32 < <(echo -n 'abcdef')
MFRGGZDFMY
$ base32 -d < <(echo  'MFRGGZDFMY')
abcdef


2

Utilizzando Python:

$ python
Python 2.7.14 (default, Sep 27 2017, 12:15:00) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> base64.b32encode('hello')
'NBSWY3DP'

0
  1. Installa perl-MIME-Base32.noarch:

    yum install perl-MIME-Base32.noarch
    
  2. Salvare lo script nel nome file bas32:

    #!/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"
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.