这个问题不太可能帮助任何未来的访问者;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况有关,而这些情况通常不适用于Internet的全球用户。要帮助更广泛地应用此问题,请访问visit the help center。
九年前就关门了。
我正在使用Crypt::Rijndael
模块来解密一些应用程序数据。
我给出了加密数据、加密密钥和客户端IV作为输入。
在432字节的应用程序数据中,解密输出的前16字节总是错误的。
use Crypt::Rijndael;
my $crypted = pack("H*",Encrypted application data);
my $key = pack("H*","4ffd099494d9cc0d0a6e238209038f27d56da73c8ce376e0b58678f1dd3d9656");
my $iv = pack("H*", "6907fd4a18bacd7bbfb0bf61b28cd37c");
my $cipher = Crypt::Rijndael->new( $key, Crypt::Rijndael::MODE_CBC() );
$cipher->set_iv($iv);
my $plaintext = $cipher->decrypt($crypted);
#my $hex = unpack "H*",$plaintext; print $plaintext;
可能导致此问题的原因是什么?
1条答案
按热度按时间g2ieeal71#
16个字节是128位,与AES/Rijndael块大小相同。如果前16个字节是垃圾,然后是完整的消息,那么可能发生的情况是IV已经被预先添加到消息中,并且您正在尝试解密IV以及消息。要解决这个问题,请提取传入密文的前16个字节并将其用作IV。
或者,你有16个字节的垃圾,后面跟着一个部分消息,缺少它的前16个字节。在这种情况下,你可能使用了错误的IV。确保你使用了正确的IV。逐字节检查以确保它是正确的。特别是,确保在传输IV时使用的任何编码都被正确处理。即使IV中有一个位是错误的,你也会有问题。