Perl Crypt::CBC错误处理

Perl Crypt::CBC错误处理,perl,encryption,Perl,Encryption,我正在使用Perl CBC对消息进行加密和解密,但是我得到的消息有时可能格式不正确。现在,如果对格式错误的消息运行decrypt,则会出现错误,程序将终止: 对于/tmp/test.pl第26行的“salt”头模式,密文不以有效头开头。 处理这一问题的正确/最佳方法是什么?我可以将其放在评估块中,并检查是否有错误,例如: eval { my $decrypted = $cipher->decrypt_hex($malformed_message); } if ($@) {

我正在使用Perl CBC对消息进行加密和解密,但是我得到的消息有时可能格式不正确。现在,如果对格式错误的消息运行decrypt,则会出现错误,程序将终止:


对于/tmp/test.pl第26行的“salt”头模式,密文不以有效头开头。

处理这一问题的正确/最佳方法是什么?我可以将其放在评估块中,并检查是否有错误,例如:

eval {
    my $decrypted = $cipher->decrypt_hex($malformed_message);
}

if ($@) {
    print "Well, that didn't work!\n";
}

但我想知道有没有更好的办法?如果Crypt::CBC没有得到很好的输入,而不是提供错误代码,那么它就完全死掉了,这似乎不是件好事。

制作加密代码,这样就不会发生这种情况。如果您不这样做,无论您如何处理错误,攻击者都可以在您的系统中引发错误,并使用这些错误可以解密您的消息。这被称为一场灾难,其破坏性相当大

您需要使用消息身份验证码(例如HMACSHA256)对整个密文进行身份验证,或使用经过身份验证的密文模式(例如AES GCM),以便在尝试解密之前检测到损坏

对不起,我不知道Perl,但是你可能希望MAC上有这样的东西

if(verifyMAC(ciphertext,message):
    //decrypt and handle 
else:
   print "While that didn't work

谢谢你的提示,Michael-如果其他人能告诉我如何用Perl实现这一点,我将不胜感激。注意,加密时也需要计算mac。因此,如果您有访问或其他认证加密方法,它会改变加密和解密代码,请考虑使用它,因为它可能比手动加密和认证更快捷更容易。