It's unfortunate that even with null values set for the optional arguments it still fails.
An alternative would be to call a different API end point that wraps systemEncrypt. For example, you could create a simple plugin for Blesta that defines a model and method that returns the value of a call to systemEncrypt.
// Plugin model
class MyPluginEncryption extends MyPlugin
{
public function encrypt($text)
{
return $this->systemEncrypt($text);
}
}
Then, instead of calling systemEncrypt directly via the API, you call your plugin method instead.
// API request
$response = $api->post("MyPlugin.MyPluginEncryption", "encrypt", array('text' => 'test123'));