我在字符串中有重要数据,我想将其随机分成多个部分(x),然后将其存储到多个位置(y)。
如果(位置>部分)我应该如何从x位置伪随机地收集数据(可能是预定义的组),并且能够重建我最初的数据。
有人建议我怎么做?
[编辑]:我将数据分成3个等分并将其隐藏在多个位置(6),即2个位置的每个部分。然后我从两个地点中的任何一个地方挑选来重建它 但我希望它更有效率和随机性,因此我想得到关于如何做到这一点的建议。
答案 0 :(得分:2)
http://en.wikipedia.org/wiki/Erasure_code似乎在谈论这类问题,并包含指向实现的指针。
http://www.usenix.org/event/fast09/tech/full_papers/plank/plank_html/在RAID的上下文中描述了这种事情。
这些是针对对象减少数据丢失几率的情况。如果对象是为了使数据更安全,“秘密拆分”可能是一个很好的第一个搜索词。
答案 1 :(得分:0)
如果您要在多个位置存储多个字符串,则每个字符串都需要一个唯一的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
当你检索时,你需要检查每个位置的字符串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