暗号化・複合化を行う ブロック暗号
Perlでブロック暗号を行うにはCrypt::CBCを使用します。
DESやIDEAやBlowfish、Rijndaelが使用可能です。
それ以外はモジュールを読み込む必要があります。
Crypt::CBC
[参考記事] ブロック暗号とは
[参考記事] PHPで暗号化・複合化を行う ブロック暗号
[参考記事] Javaで暗号化・複合化を行う ブロック暗号
[参考記事] Rubyで暗号化・複合化を行う ブロック暗号
サンプルコード
使用できる暗号アルゴリズムの一覧
使用できる暗号利用モードの一覧
指定できるパディング方式の一覧
この暗号化方式はアルゴリズム規定のブロック長に分割して秘密鍵を用いて暗号化を行います。
規定のブロック長に分割する方式を暗号利用モード、ブロック長に満たないときの補完方法をパディング方式といいます。
暗号利用モードで分割するときに前の平文ブロックの結果を次の平文に使用しますが、この最初のブロックで使用される値がIV(初期化ベクトル)です。
まとめ
暗号化の流れ
(1) ブロック長に満たない部分をパディング方式で補完する。
(2) アルゴリズムに対応したブロック長に分割する。
このときの分割ルールを決めるのが暗号利用モード
分割モードによっては初期値が必要で、これがIV(初期化ベクトル)
(3) 暗号鍵を用いてアルゴリズムで暗号化する。
(4) 分割されたデータを結合する。
復号化の流れ
(1) アルゴリズムに対応したブロック長に分割する。
(2) 暗号鍵を用いてアルゴリズムで復号化する。
(3) 暗号利用モードを元に分割されたデータを結合する。
分割モードによっては初期値が必要で、これがIV(初期化ベクトル)
(4) 補完されたパディングをパディング方式で除去する。
ブロック暗号では、
ブロック長
秘密鍵
暗号アルゴリズム
暗号利用モード
パディング方式
IV(初期化ベクトル)
の6つのキーワードが重要です。
ブロック長、共通鍵の長さは使用する暗号アルゴリズムに依存します。
アルゴリズム、暗号利用モード、パディング方式など暗号化の詳細は次のように指定します。
my $cipher = Crypt::CBC->new( -key => '0123456789ABCDEF', # 暗号化鍵 -keysize => 16, # 鍵の長さ -literal_key => 1, # 鍵をMD5ハッシュから派生するかどうか(1:しない/0:する デフォルトは1) -cipher => "Rijndael", # 暗号化アルゴリズム フルネーム Crypt::Rijndaelでもよい -iv => '0000000000000000', # IV(初期化ベクトル) -prepend_iv => 0, # 内部で行われるIV関連の処理を使用するか(1:しない/0:する デフォルトは1) -padding => 'space', # パディング方式(standard [PKCS#5]) -pcbc => 1, # PCBCを使うか(1:PCBC/0:CBC デフォルトは0) );
標準以外の暗号化アルゴリズムを使用するにはCrypt::Rijndael・Crypt::Twofish・Crypt:DES_EDE3 などのモジュールをインストールする必要があります。
サンプルコード
use Crypt::CBC; # Crypt::CBCのコンストラクタ。 my $cipher = Crypt::CBC->new( -key => '0123456789ABCDEF', -keysize => 16, -literal_key => 1, -cipher => "Rijndael", -iv => '0000000000000000', -header => 'none', ); my $input = 'plain text'; my $ciphertext = $cipher->encrypt_hex($input); my $plaintext = $cipher->decrypt_hex($ciphertext); # 入力がバイト型の場合 my $encrypted = $cipher->encrypt($input); my $decrypted = $cipher->decrypt($encrypted);
使用できる暗号アルゴリズムの一覧
Crypt::Blowfish
Crypt::Rijndael
Crypt::DES
Crypt::IDEA
Crypt::RC4
Crypt::Blowfish_PP
Crypt::Twofish
Crypt::TripleDES
Crypt::Rijndael_PP
Crypt::RSA
使用できる暗号利用モードの一覧
CBC | Cipher Block Chaining Mode | デフォルト |
---|---|---|
PCBC | Propagating Cipher Block Chaining | コンストラクタでpcbc => 1 |
指定できるパディング方式の一覧
standard | PKCS#5 Padding |
---|---|
oneandzeroes | ブロックを一杯にするだけ必要なだけの"00"がついた"80"で埋められます。 もし最後のブロックがブロック全体で、ブロックサイズが8であれば、"8000000000000000"というブロックが追加されます。 |
null | ZeroBytePadding |
space | ZeroBytePaddingの埋める値が0x20 |
関連記事
- cron実行時の標準出力のメールを飛ばさない方法(cron実行時に毎回メールを飛ばさない)
- cron実行時のPATHなどの環境変数を確認する方法
- cronのメール送信先を指定する方法(cronごとに送信先のメールアドレスを指定する方法)
- cron実行時に『/bin/sh: 〜〜: command not found』と出てcronが実行されない場合
- 『crontab -r』でcronの設定を間違って消してしまった場合の対処法
- cronを実行すると『TERM environment variable not set.』というエラーメールが飛ぶ
- 「ID」や「ID_xxxx」という文字列があるCSVファイルをExcelで開くとSYLKエラーが出る
- Excelの日付が数字になるときの対処法
- facebook APIを使用する時にfacebook Appsでアプリを登録するまでの流れ
- SELECTタグで色を選択する場合のサンプル
- [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV)
- switch文とif文の違い
- memcachedを使用する(Cache::Memcachedモジュール)
- Premature end of script headers とは
- 指定されたパスが見つかりません couldn't create child process とは
- EclipseでCGI(Perl)の開発環境を作る EPICプラグイン
- Bugzilla [Mozillaのバグ追跡システム]
- YukiWiki (結城ウィキ)
スポンサーリンク