Pengkodean ke base32 dari shell

9

Saya mencari untuk menyandikan string input ke encoding base32 langsung dari shell. Saya ingin melakukan ini di ubuntu, tapi saya rasa rasanya tidak terlalu penting di sini.

Apakah ada alat linux / unix yang ada di luar sana untuk melakukan ini?

Sesuatu di sepanjang garis:

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

Jawaban:

10

Hmm, pencarian paket cepat tidak memberikan sesuatu seperti utilitas tunggal yang berdiri sendiri.

Di sisi lain, ini menunjukkan bahwa ada perpustakaan Perl yang sesuai, dan cukup mudah untuk membuat skrip perl cepat. Sesuatu seperti:

$ sudo apt-get install libmime-base32-perl

Dan kemudian skrip seperti 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";

Begitu:

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

Entri CPAN yang cukup jarang adalah: http://search.cpan.org/~danpeder/MIME-Base32-1.01/Base32.pm

Jadi, perubahan kecil akan memungkinkan Anda melakukan decode juga.

cjc
sumber
2

Hanya peningkatan dari jawaban cjc yang sangat baik sehingga kita dapat memiliki base32utilitas yang berfungsi serupa dengan base64cara kita dapat menyandikan dan mendekode:

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

Uji:

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

Itu diinstal secara default di Ubuntu 16.04 sebagai bagian dari coreutils :

$ which base32
/usr/bin/base32
David Braun
sumber
2

Menggunakan 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'
Antonio
sumber
0
  1. Pasang perl-MIME-Base32.noarch:

    yum install perl-MIME-Base32.noarch
    
  2. Simpan skrip dalam nama 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"
    
Anand
sumber