0

我正在使用 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 没有得到很好的输入,而不是提供错误代码,它就完全死掉了,这似乎不太好。

4

1 回答 1

1

制作您的加密代码,这样就不会发生这种情况。如果您不这样做,无论您如何处理错误,攻击者都可以在您的系统中引发错误,并使用它们可以解密您的消息。这被称为填充预言机攻击,具有相当的破坏性。

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

抱歉,我不知道 Perl,但你会想要这样的 MAC

if(verifyMAC(ciphertext,message):
    //decrypt and handle 
else:
   print "While that didn't work
于 2013-06-29T00:08:39.033 回答