1

Perl を使用して、Crypt::CBC ライブラリを使用して CBC DES 暗号化を実行しています。

#!/usr/bin/perl
use Crypt::CBC;
$key  = "\x4A\x6F\xC2\x2A\x44\xE2\xA4\x48"; 
$iv   = "\x00\x00\x00\x00\x00\x00\x00\x00";
$data = "\x51\x55\x45\x53\x54\x49\x4F\x4E";

print "TXT->", $data, "\n";
print "HEX->", unpack("H*", $data), "\n";
$cipher = Crypt::CBC->new(-literal_key => 1,
                    -key         => $key,
                    -iv          => $iv,
                    -header      => 'none');

$ciphertext = $cipher->encrypt($data);
print "ENC->", unpack("H*", $ciphertext), "\n";

コードの出力は次のとおりです。

TXT->QUESTION
HEX->5155455354494f4e
ENC->8220553e09f1b31ba7691f3f7fb52416

私のデータは便利なサイズの 64 ビット (16 桁の 16 桁) で、DES 標準に準拠しています。ウィキペディアによると

DES は典型的なブロック暗号です — 平文ビットの固定長文字列を取り、一連の複雑な操作によって同じ長さの別の暗号文ビット文字列に変換するアルゴリズムです

エンコードされた出力のバイト長が元の入力よりも長いのはなぜですか?

ありがとう。

4

2 に答える 2

3

2 番目のブロック (a7691f3f7fb52416) から逆方向に作業すると 8a285d3601f9bb13 が得られ、最初のブロック (8220553e09f1b31b) と XOR すると 0808080808080808 (HEX) が得られます。何かが 0808080808080808 のブロック値を 2 番目の入力ブロック値として生成しています。

CBC値

したがって、バックスペース文字が 2 番目のブロック入力としてどこから来たのかを把握するだけです。

https://metacpan.org/pod/Crypt::CBCを参照

これ:

#!/usr/bin/perl

use Crypt::CBC;
$key  = "\x4A\x6F\xC2\x2A\x44\xE2\xA4\x48"; 
$iv   = "\x00\x00\x00\x00\x00\x00\x00\x00";
$data = "\x51\x55\x45\x53\x54\x49\x4F\x4E";

print "TXT->", $data, "\n";
print "HEX->", unpack("H*", $data), "\n";
$cipher = Crypt::CBC->new(-literal_key => 1,
                    -key         => $key,
                    -iv          => $iv,
                    -header      => 'none',
                    -padding     => 'null');

$ciphertext = $cipher->encrypt($data);

print "ENC->", unpack("H*", $ciphertext), "\n";

与えた:

david_koontz@Macbook: cbc_des
TXT->QUESTION
HEX->5155455354494f4e
ENC->8220553e09f1b31b
david_koontz@Macbook:

私は DES についてかなりのことを知っていて、perl についてはあまり知らなかったので、うろうろするのは間違いでした。

Crypt::CBC と Crypt::DES を perl ライブラリに追加する方法を学んだ後、パディングの null を追加するとうまくいくように見えました。

http://code.google.com/p/dpades/source/browse/trunk/simu_js/JS-DES.htmlを使用して、何が起こっているのかを把握するために必要な暗号化と復号化を行いました。RAW ファイルの表示ボタンを使用して JS-DES.html をローカルに保存し、ブラウザーで開きます。

于 2014-02-20T09:29:39.510 に答える
0

IV が含まれているため、暗号化されたメッセージは長くなります。ところで、固定 IV は意味がありません。メッセージごとにランダムで新しく生成する必要があります。

于 2014-02-20T08:53:39.777 に答える