我正在使用Perl CBC来加密和解密消息,但我收到的消息有时可能会格式不正确。现在,如果我对格式不正确的消息运行解密,我就会收到错误,程序就会死掉:
Ciphertext does not begin with a valid header for 'salt' header mode at /tmp/test.pl line 26.
处理此问题的正确/最佳方法是什么?我可以将它放在一个eval块中并检查错误,例如:
eval {
my $decrypted = $cipher->decrypt_hex($malformed_message);
}
if ($@) {
print "Well, that didn't work!\n";
}
但我想知道是否有更好的方法?如果Crypt :: CBC没有得到好的输入,而不是提供错误代码,那么它似乎并不完美。
答案 0 :(得分:1)
制作加密代码,以免发生这种情况。如果不这样做,无论您如何处理错误,攻击者都可能在系统中引发错误,使用它们可以解密您的邮件。这被称为padding oracle attack,而且相当具有破坏性。
您需要使用消息身份验证代码(例如HMACSHA256)验证整个密文,或使用经过身份验证的密文文本模式(如AES GCM),以便在尝试解密之前检测损坏。
抱歉,我不知道Perl,但你想要这样的MAC
if(verifyMAC(ciphertext,message):
//decrypt and handle
else:
print "While that didn't work