การเข้ารหัสไปที่ base32 จากเชลล์


9

ฉันต้องการเข้ารหัสสตริงอินพุตเพื่อเข้ารหัส base32 โดยตรงจากเชลล์ ฉันกำลังมองหาที่จะทำสิ่งนี้ในอูบุนตู แต่ฉันจินตนาการว่ารสชาติไม่สำคัญที่นี่

มีเครื่องมือ linux / unix ที่มีอยู่เพื่อทำสิ่งนี้หรือไม่?

บางสิ่งบางอย่างตาม:

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

คำตอบ:


10

อืมการค้นหาแพ็คเกจอย่างรวดเร็วไม่ได้ให้อะไรอย่างเดียวกับยูทิลิตี้เดี่ยว ๆ

ในทางตรงกันข้ามมันแสดงให้เห็นว่ามีห้องสมุด Perl ที่เหมาะสมและมันก็ง่ายพอที่จะทำให้สคริปต์ perl รวดเร็วขึ้น สิ่งที่ต้องการ:

$ sudo apt-get install libmime-base32-perl

แล้วสคริปต์เช่น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";

ดังนั้น:

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

รายการ CPAN ค่อนข้างกระจัดกระจายคือ: http://search.cpan.org/~danpeder/MIME-Base32-1.01/Base32.pm

ดังนั้นการเปลี่ยนแปลงเล็กน้อยจะช่วยให้คุณถอดรหัสได้เช่นกัน


2

เพียงแค่การปรับปรุงคำตอบที่ยอดเยี่ยม cjc เพื่อให้เราสามารถมีbase32ยูทิลิตี้ที่ทำงานคล้ายกับbase64วิธีที่เราสามารถเข้ารหัสและถอดรหัส:

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

ทดสอบ:

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


2

ใช้ 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. ติดตั้งperl-MIME-Base32.noarch:

    yum install perl-MIME-Base32.noarch
    
  2. บันทึกสคริปต์ในชื่อไฟล์ 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"
    
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.