Имитация char[] для хранения паролей в Dart или Python

Я читал этот вопрос о хранении паролей с помощью char[] в Java и понял, что есть языки, в которых нет массивов символов. И Dart, и Python используют списки объектов вместо массивов ( Документация по Dart и Учебное пособие по Python). Насколько я понимаю, это будет означать, что вы не можете перезаписать память и, таким образом, оставит приложение открытым для атаки дампа памяти.

Есть ли способ перезаписать память и, таким образом, избежать этой возможности атаки в Dart или Python?

Открытые вопросы и вопросы, основанные на мнениях, которые сводятся к субъективным ответам, как правило, не подходят для этого сайта, поскольку обычно существует не один правильный ответ, а целый ряд мнений, основанных на разных подходах.

itprorh66 07.10.2022 16:08

@itprorh66 itprorh66 Я отредактировал его, чтобы было более ясно, что я спрашиваю, есть ли способ перезаписать память, а не о том, следует ли мне беспокоиться об этом (поэтому вопрос «как это сделать», который должен отвечать с объективной точки зрения).

TarHalda 07.10.2022 16:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Re: Питон:

Объекты strings и bytes неизменяемы в Python, поэтому да, изменение их содержимого создаст новый объект, в то время как старый останется в памяти на некоторое время, прежде чем в конечном итоге будет удален сборщиком мусора и рано или поздно перезаписан вновь созданными объектами.

OTOH вы можете использовать bytearrays, которые изменяемы - очевидным недостатком является то, что вы будете ограничены 8-битными символами.

Примечание: списки также изменяемы, но список строк из одного символа будет иметь (смягченную версию) ту же проблему: не останется «старого» списка, но различные элементы останутся до тех пор, пока не будет собран мусор.

Даже массивы байтов могут (по крайней мере, в Dart, не знаю Python) перемещаться сборщиком мусора, который может оставлять копии в памяти до тех пор, пока эта память не будет перераспределена. В Dart я бы использовал dart:ffi для выделения памяти вне кучи собранного мусора, чтобы убедиться, что вам нужно очистить только одно место. Это работает только на родной виртуальной машине. В Интернете вы ограничены тем, что позволяет JavaScript. (С другой стороны, перезапись List<int> в Dart очистит эту копию данных, даже если целые числа выглядят как объекты. Маленькие целые числа на самом деле не являются объектами и в любом случае вездесущи.)

lrn 07.10.2022 18:12

Другие вопросы по теме