Условием для hasArray
является
(hb != null) && !isReadOnly
isReadOnly
, если вы, например, используете asReadOnlyBuffer
CharBuffer.allocate(20).asReadOnlyBuffer();
.
Так что да, нам это нужно.
Возьмите эту строку
final CharBuffer cb = instance.getCharBuffer(...);
Это только для чтения или нет? Содержит ли он действительный массив char[]
? Мы действительно не знаем. Если мы сделаем
cb.array();
и это буфер только для чтения, мы получим ReadOnlyBufferException
.
Если он не поддерживается массивом char[]
, мы получаем UnsupportedOperationException
.
Итак, что мы могли бы сделать, это
if (cb.hasArray()) {
final char[] arr = cb.array();
}
Теперь мы находимся Exception
в безопасности.
Также вы можете быть уверены, что инженеры Oracle / OpenJDK / whatJDK знают, что они делают;)
Шифрование встроено в систему конфигурации.NET. Можно зашифровать блоки app/web.config файла, включая то, где Вы храните свой закрытый ключ.
Если кто-то может просто присоединить отладчик к Вашей программе, нет абсолютно ничего, что можно сделать. Они не должны будут выяснить Вашу конфигурацию, демонтировать Ваше приложение и т.д. Все, что они должны сделать, запущено, приложение - наблюдает, что он использует ключ - бинго.
Путаница не имеет справки при тех условиях.
Лучшая защита состоит в том, чтобы использовать аппаратные средства для защиты ключа - который сделает crypto, но не выделит сам ключ (и иногда укрепляется против нападений, таких как зондирование проводов, выставляя память низкому temperatures/radiation/other новому материалу). IBM делает некоторый соответствующий материал (google IBM 4764), но это не дешево.