シェルから直接、入力文字列をbase32エンコーディングにエンコードしようとしています。私はこれをubuntuで行うつもりですが、ここでは特にフレーバーは問題にならないと思います。
これを簡単に行うための既存のlinux/unixツールはありますか?
以下に沿ったもの:
-bash-3.2$ echo -n 'hello' | base32
うーん、クイックパッケージ検索では、単一のスタンドアロンユーティリティのようなものはありません。
一方、適切な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
したがって、マイナーな変更により、デコードも可能になります。
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
coreutils の一部として、Ubuntu 16.04にデフォルトでインストールされます:
$ which base32
/usr/bin/base32
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'
インストール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"