我希望直接从 shell 将输入字符串编码为 base32 编码。我希望在 ubuntu 中执行此操作,但我想风格在这里并不特别重要。
是否存在任何现有的 Linux/Unix 工具可以简单地完成此操作?
大致如下:
-bash-3.2$ echo -n 'hello' | base32
答案1
嗯,快速包搜索不会提供任何类似单一、独立的实用程序的东西。
另一方面,它表明有一个合适的 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
它默认安装在 Ubuntu 16.04 中,作为核心工具:
$ which base32
/usr/bin/base32
答案3
使用 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'
答案4
安装
perl-MIME-Base32.noarch
:yum install perl-MIME-Base32.noarch
将脚本保存在 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"