Ответ 1
На самом деле не имеет значения, является ли API/код потокобезопасным. CBC-шифрование само по себе не является потокобезопасным. Некоторая терминология -
E(X) = Enctrypt message X
D(X) = Dectrypt X. (Note that D(E(X)) = X)
IV = Initialization vector. A random sequence to bootstrap the CBC algorithm
CBC = Cipher block chaining.
На самом деле простая реализация CBC может выглядеть так: P1, P2, P3 = Обычные текстовые сообщения
1. Generate an IV, just random bits.
2. Calculate E( P1 xor IV) call this C1
3. Calculate E( P2 xor C1) call this C2
4. Calculate E( P3 xor C2) call this C3.
Как вы можете видеть, результат шифрования P1, P2 и P3 (в указанном порядке) отличается от шифрования P2, P1 и P3 (в этом порядке).
Итак, в реализации CBC порядок важен. Любой алгоритм, где порядок важен, по определению не может быть потокобезопасным.
Вы можете создать Singleton factory, который предоставляет объекты шифрования, но вы не можете доверять им, чтобы они были потокобезопасными.