Как разделить строку на несколько частей и восстановить ее в обратном направлении? - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть важные данные в строке, и я хочу случайным образом разделить их на несколько частей (x) и затем сохранить их в нескольких местах (y).

Если (местоположения> части), как я должен собирать данные псевдослучайно из x местоположения (могут быть предварительно определенными группами) и иметь возможность восстановить данные, которые у меня были изначально.

Пожалуйста, кто-нибудьподскажите, как это сделать?

[РЕДАКТИРОВАТЬ]: Я разделил данные на 3 равные части и скрыл их в нескольких местах (6), то есть в каждой части в 2 местах.Затем я выбираю любое из двух мест для его восстановления.
Но я хочу, чтобы оно было более эффективным и случайным, поэтому я хотел бы получить предложения о том, как это сделать.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

http://en.wikipedia.org/wiki/Erasure_code, кажется, говорит об этой проблеме и содержит указатели на реализации.

http://www.usenix.org/event/fast09/tech/full_papers/plank/plank_html/ описывает подобные вещи в контексте RAID.

Это для случаев, когда целью является снижение вероятности потери данных.Если цель состоит в том, чтобы сделать данные более безопасными, «секретное разделение» может быть хорошим первым поисковым термином.

0 голосов
/ 26 сентября 2011

Если вы собираетесь хранить несколько строк в нескольких местах, вам нужен уникальный идентификатор для каждой из них, чтобы вы могли получить его позже.

void Store(String, UID);
String Restore(UID);

Если расположения и порядок случайны, то ваши строкидолжны быть помечены в правильном порядке.

LOCATION 1: String UID 1: String Piece 3
LOCATION 2: String UID 1: String Piece 1
LOCATION 3: String UID 1: String Peice 2
LOCATION 4: empty

При извлечении необходимо проверить каждое место для строкового UID, собрать всю строку и перестроить в правильном порядке.

Вотпример использования файлов:

Your 4 random locations are
c:\Folder1
c:\Folder2
c:\Folder3
c:\Folder4

Store("abcdefghij", 1);
c:\folder1\1.str
3
hij
c:\Folder2\1.str
1
abcd
c:\Folder3\1.str
2
efg

Store("1234567890", 2);
c:\folder1\2.str
2
567
c:\Folder3\2.str
3
890
c:\Folder4\2.str
1
1234

Restore(2)
Read c:\Folder1\2.str - Piece 2
Read c:\Folder2\2.str - Doesn't Exist
Read c:\Folder3\2.str - Piece 3
Read c:\Folder4\2.str - Piece 1
Sort Pieces
Concatenate Pieces
Return String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...