Mã hóa đến cơ sở32 từ vỏ


9

Tôi đang tìm cách mã hóa một chuỗi đầu vào thành mã hóa base32 trực tiếp từ shell. Tôi đang tìm cách để làm điều này trong Ubuntu, nhưng tôi tưởng tượng hương vị không đặc biệt quan trọng ở đây.

Có bất kỳ công cụ linux / unix hiện có nào để làm điều này không?

Một cái gì đó dọc theo dòng:

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

Câu trả lời:


10

Hmm, một tìm kiếm gói nhanh không cung cấp bất cứ thứ gì như một tiện ích độc lập, duy nhất.

Mặt khác, nó cho thấy rằng có một thư viện Perl thích hợp và đủ dễ dàng để tạo ra một kịch bản perl nhanh chóng. Cái gì đó như:

$ sudo apt-get install libmime-base32-perl

Và sau đó một kịch bản như 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";

Vì thế:

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

Mục nhập CPAN khá thưa thớt là: http://search.cpan.org/~danpeder/MIME-Base32-1.01/Base32.pm

Vì vậy, một thay đổi nhỏ cũng sẽ cho phép bạn giải mã.


2

Chỉ là một cải tiến của câu trả lời xuất sắc của cjc để chúng ta có thể có một base32tiện ích hoạt động tương tự như base64cách chúng ta có thể mã hóa và giải mã:

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

Kiểm tra:

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

2

Nó được cài đặt mặc định trong Ubuntu 16.04 như một phần của coreutils :

$ which base32
/usr/bin/base32

2

Sử dụng 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. Cài đặt perl-MIME-Base32.noarch:

    yum install perl-MIME-Base32.noarch
    
  2. Lưu tập lệnh trong tên tệp 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"
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.