【问题标题】:How to divide a string into multiple parts and reconstruct it backwards?如何将字符串分成多个部分并向后重构?
【发布时间】:2011-09-26 16:58:40
【问题描述】:

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

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

请有人建议我如何做到这一点?

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

【问题讨论】:

  • @Howard 在编辑中回答了你的问题。谢谢
  • rand / random。你有什么问题?有什么问题?
  • 我认为我最大的担忧是你不能试图发明你自己的密码学。这是给你的链接:lst.de/~okir/blackhats/node126.html
  • 嗯,一些示例输入和所需的输出可能会有所帮助。

标签: c algorithm math


【解决方案1】:

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

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

这些适用于目标是降低数据丢失几率的情况。如果目标是让数据更安全,“秘密拆分”可能是一个不错的首选搜索词。

【讨论】:

    【解决方案2】:

    如果您要在多个位置存储多个字符串,则需要为每个字符串设置一个唯一 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
    

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      相关资源
      最近更新 更多