iT邦幫忙

0

加密字串時發現一種特殊的陣列排序,但不得其名

  • 分享至 

  • xImage

譬如這段程式碼中的"order"陣列
我把一個字串用這個排序作亂序化
打亂後的字串再亂序一次居然輸出了原字串

static void Main(string[] args)
{
    string content = "ABCED";
    int[] order = new int[] { 4, 2, 1, 3, 0 };
    string out1 = Chaos(content, order);
    string out2 = Chaos(out1, order);
    //DCBEA-ABCED
    Console.Out.WriteLine($"{out1}-{out2}");
    Console.ReadLine();
}

private static string Chaos(string content, int[] order)
{
    char[] chars = content.ToCharArray();
    StringBuilder sb = new StringBuilder();
    foreach(int index in order)
        sb.Append(chars[index]);
    return sb.ToString();
}

當然,像這樣的陣列有非常多個(另外寫迴圈找出了許多)
但並不是隨便一個陣列都有相同效果
我想知道更多有關的知識
但是它叫什麼名字呢? 或者它尚未被定義?

我沒讀過密碼學,這只是我亂寫的加密器中的一部份

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
bizpro
iT邦大師 1 級 ‧ 2017-04-06 22:00:27

這像是排列加密(permutation cipher), 在您的例子中:
原始排列: 4 2 1 3 0
交換順序: 0 1 2 3 4
第一次:
字串第0位和第4位交換
字串第1位和第2位交換
字串第3位不變.
第二次:
字串第0位和第4位交換
字串第1位和第2位交換
字串第3位不變.

因此交換兩次就歸位了.

記憶中應該在計算機概論中有介紹過.

例如:
4 3 2 1 0是(4,0)和(3,1)交換, 2不動

huybn576 iT邦新手 5 級 ‧ 2017-04-06 22:46:59 檢舉

感謝
研究後得知我的寫法確實是Permutation cipher
然而大部份用法是加密與解密用不同陣列
我則是找到了同一陣列同時能加密與解密,不知道這種陣列有沒有被定義過?

bizpro iT邦大師 1 級 ‧ 2017-04-06 23:03:52 檢舉

然而大部份用法是加密與解密用不同陣列
-->非對稱加密, 即公開密鑰加密, PKI, 有兩把金鑰
我則是找到了同一陣列同時能加密與解密,不知道這種陣列有沒有被定義過?
-->對稱加密, 用同一密鑰.

huybn576 iT邦新手 5 級 ‧ 2017-04-07 19:24:24 檢舉

原來是這樣
看來我可以叫它對稱加密型的排列加密

我要發表回答

立即登入回答