C语言 如何将字符串分成多个部分并向后重建它



我在字符串中有重要的数据,我想随机将其分成多个部分(x),然后将其存储到多个位置(y)。

如果(locations> parts)我应该如何从x个位置(可能是预定义的组)伪随机地收集数据,并能够重建我最初拥有的数据。

有没有人告诉我该怎么做?

[EDIT]:我将数据分成3个相等的部分,并将其隐藏在多个位置(6),即每个部分在2个位置。然后,我从两个位置中的任何一个选择重建它。
但是我想让它更有效和随机,因此我想得到关于如何做到这一点的建议

http://en.wikipedia.org/wiki/Erasure_code似乎在讨论这类问题,并包含了实现的指针。

http://www.usenix.org/event/fast09/tech/full_papers/plank/plank_html/在RAID上下文中描述了这类事情。

这些用于对象要减少数据丢失几率的情况。如果目标是使数据更安全,"秘密分割"可能是一个不错的首选搜索词。

如果要在多个位置存储多个字符串,则需要为每个字符串提供唯一的ID,以便稍后检索。

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

检索时需要检查String UID的每个位置,收集所有字符串片段并按正确的顺序重建。

下面是一个使用文件的例子:

Your 4 random locations are
c:Folder1
c:Folder2
c:Folder3
c:Folder4
Store("abcdefghij", 1);
c:folder11.str
3
hij
c:Folder21.str
1
abcd
c:Folder31.str
2
efg
Store("1234567890", 2);
c:folder12.str
2
567
c:Folder32.str
3
890
c:Folder42.str
1
1234
Restore(2)
Read c:Folder12.str - Piece 2
Read c:Folder22.str - Doesn't Exist
Read c:Folder32.str - Piece 3
Read c:Folder42.str - Piece 1
Sort Pieces
Concatenate Pieces
Return String

最新更新