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

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.


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


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'

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"
    
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.