@Override
    protected boolean isGenerateInitializationVectors(boolean streaming) {
        return streaming || super.isGenerateInitializationVectors() && isModeInitializationVectorCompatible(getModeName());
    }
Overrides the parent implementation to ensure initialization vectors are always generated if streaming is
enabled (block ciphers <em>must</em> use initialization vectors if they are to be used as a stream cipher).  If
not being used as a stream cipher, then the value is computed based on whether or not the currently configured
{@link #getModeName modeName} is compatible with initialization vectors as well as the result of the configured
{@link #setGenerateInitializationVectors(boolean) generateInitializationVectors} value.

@param streaming whether or not streaming is being performed
@return {@code true} if streaming or a value computed based on if the currently configured mode is compatible
        with initialization vectors.
src/main/java/org/apache/shiro/crypto/cipher/DefaultBlockCipherService.java