能力值:
(RANK:680 )
2 楼
几处小笔误:
1.
两个对角的和分别是 (16+1)=11
应为17
能力值:
(RANK:680 )
3 楼
另一处小笔误:
magic=(int *)malloc(n* sizeof(int)); *magic=(int *)malloc(n*sizeof(int));
应该为: magic=(int **)malloc(n* sizeof(int));
for(i=0;i<n;i++)
*(magic+i)=(int *)malloc(n*sizeof(int));
能力值:
(RANK:420 )
4 楼
两个对角的和分别是 (16+1)=11
這是筆誤。
真的是 17 ,一看就知道。
謝謝提醒。
至於
magic=(int *)malloc(n* sizeof(int)); *magic=(int *)malloc(n*sizeof(int));
是沒錯的。
您要那樣寫,應該也是可以。
我只是把 magic square 的 psuecode release 出來,它應該還可以再 optimize。
能力值:
(RANK:420 )
5 楼
应为格子数的平方(或二次方)
您誤解囉。
是兩個紅色圈圈的相加,或是兩個藍色框框的相加,他們各自 的 sum 為 格子數總和再加 1。
能力值:
(RANK:680 )
6 楼
对的, 我失误了. 格子数 = n*n . 不等于n的. 呵呵, 我自己粗心了~~
能力值:
(RANK:420 )
7 楼
沒關係,讀者讀懂最重要。
這可是我50篇論文當中的其中一篇。
新改良版 magic sqaure,這個方法是我得意的之一。
能力值:
(RANK:420 )
8 楼
这些附件是根据
【原创】流密码内嵌魔方阵于随机存档之研究 所设计出来的东西。
然后接
【原创】流密码内嵌魔方阵于随机存档之研究-- Magic Square 篇 继续讨论。
再继续讨论
【原创】流密码内嵌魔方阵于随机存档之研究-- Magic Square 之神奇篇
在这里会是一个 magic square 篇的 final。
上面这个9 by 9 magic square 是由原本的 C program 产生的。
现在我要介绍它的 mutation。
我们知道在 magic square 中最小的是 3 by 3 matrix,如果要产生一个 9 by 9 magic square,其实可以经由 3 by 3 magic square 产生。不必直接产生 9 by 9 magic square。
3 跟 9 的关系,可以看成是 expand 及condense relationship,因此我们可以利用 3 by 3 magic square 的原理,创造出一个9 by 9 magic square。
怎么说呢?
下面这个彩色的 9 by 9 magic square 就是由 3 by 3 magic square 所 expanded 出来的。
现在我们来看红色粗线,我把它分成一个井字形,或是九宫格。
它总共有九大区块 (9 big blocks),分别 mark 上不同颜色,每一大区块又可以细分成九小区块 (9 small blocks)。
现在,我们把九大区块分别编号,从(1) 到(9),再把(1)切割为1到9。
等全部切割完毕,再按顺序从1至81填入9 by 9 magic square。
填完毕后,就大功告成。
我现在用四个 corner 的值来初步验证一下。
(71+11)= 82,(51+31)=82,因 9 * 9 = 81,而 82 比 81 大 1。
符合大于 1 的特性。
验证每一个 column 及 row 或是 cross 的 sum 会不会一样,我就不计算,留给您们自己算。
产生更大的 magic square,可以利用这样的方式依此类推。
关于 magic square topic,我就介绍到这里。
后面若有空,我会回到 stream cipher 的 pseudo random generator 的 topic。
上传的附件:
能力值:
( LV2,RANK:10 )
9 楼
“Send 最少要传 plaintext 及 key 给 receiver”
LZ的意思难道是你讲的这个Magic Square的东东就不需要传送Key了?
“For example:
Sender 传送 seeds 为 (9,47,45,37,35) 及 cipertext 给 receiver 时,receiver 收到后,……”
其实还是传了四个角上的数字和Square的阶数过去,而这5个变量又可以唯一的生成一个矩阵,尽管LZ把这个称之为Seed,但是我觉着这里面有偷换概念的嫌疑,这个seed就是Key嘛,你那个生成Square的算法其实就是相当于一个对称算法的密钥扩展函数。
“当 receiver 收到 sender 所传送的 ciphertext 及 seed 时,receiver 可以利用自行产生一个 magic square,此时,产生的这个 magic square 就是一个 key,利用这个 key 来把 ciphertext 做decryption,就会得到plaintext。”一个seed唯一对应一个squae,实际上seed就是Key,没有什么不一样的地方。
这个东东有意思的是那个阶越高组合可能就越大的问题,随后再找TW版主讨论。
能力值:
(RANK:420 )
10 楼
“Send 最少要传 plaintext 及 key 给 receiver” LZ的意思难道是你讲的这个Magic Square的东东就不需要传送Key了?
是的!
“For example: Sender 传送 seeds 为 (9,47,45,37,35) 及 cipertext 给 receiver 时,receiver 收到后,……” 其实还是传了四个角上的数字和Square的阶数过去,而这5个变量又可以唯一的生成一个矩阵,尽管LZ把这个称之为Seed,但是我觉着这里面有偷换概念的嫌疑,这个seed就是Key嘛,你那个生成Square的算法其实就是相当于一个对称算法的密钥扩展函数。
所謂 key ,是直接可以進行 encrypt 及 decrypt,所以,這就是為什麼在 Cryptology 裏,要保護 key 的原因。seed 的確跟 key 的地位很像。
“当 receiver 收到 sender 所传送的 ciphertext 及 seed 时,receiver 可以利用自行产生一个 magic square,此时,产生的这个 magic square 就是一个 key,利用这个 key 来把 ciphertext 做decryption,就会得到plaintext。”一个seed唯一对应一个squae,实际上seed就是Key,没有什么不一样的地方。
這個 seed 本身就很像 key ,但不是 key。key 是 那個 magic square。
如我之前說了,要先有 seed ,再利用 seed 產生 key。
至於 一個 seed 是不是唯一對應一個 square,這點我還在研究中。
我希望是,但我擔心實際上不是。
这个东东有意思的是那个阶越高组合可能就越大的问题,随后再找TW版主讨论。
謝謝您參與這個討論。
※
這裏有衍生一個問題,如果“一个 seed 唯一对应一个 squae ”,那這個 seed,就要 keep secret,那 seed 的確跟 key 的功能差不多。
如果“ 一个 seed 不是唯一对应一个 squae”,那這個 seed,是否有必要 keep secret?
當 不是唯一對應的關係時, receiver 又怎麼能判斷怎麼產生正確的magic square!?
能力值:
( LV2,RANK:10 )
11 楼
BOSS不在,上来发帖~~~
这里面有两个问题:
1. 如果Seed与square一一对应,则有固定算法可以从Seed恢复出Key,seed传送过程仍然要保密,因为在密钥体系中的作用一致。其实DES的Key也不是直接拿来去参与Feistel结构的加密过程了了,而是经过了密钥扩展,生成了16轮迭代的子密钥,每个子密钥去参与Feistel中的异或运算。参照DES来看,版主说的Seed更类似与DES的Key,而Square更类似于DES的16轮子密钥。
2. 如果不是一一对应的,就不是有无必要Keep secret的问题了,假设A发送了用某个Square_1加密过的密文C(假设明文是M1),同时传给B的还有一个Seed,但是Seed恢复出来的Square_2与Sqare_1不同,就无法保证B可以将C还原了。
不知说的是否清楚。简单试验了一下(主要是不知如何证明……汗)貌似是一一对应的。有没有数分比较悍的同学给个证明出来啊。
能力值:
(RANK:420 )
12 楼
1. 如果Seed与square一一对应,则有固定算法可以从Seed恢复出Key,seed传送过程仍然要保密,因为在密钥体系中的作用一致。其实DES的Key也不是直接拿来去参与Feistel结构的加密过程了了,而是经过了密钥扩展,生成了16轮迭代的子密钥,每个子密钥去参与Feistel中的异或运算。参照DES来看,版主说的Seed更类似与DES的Key,而Square更类似于DES的16轮子密钥。
我在前面的帖子裏就說明了,seeds 要在 secure channel 或是 VPN 裏傳輸,要保護 seeds。
我這裏沒論及 DES ,所以不知道你說的那個情況。
2. 如果不是一一对应的,就不是有无必要Keep secret的问题了,假设A发送了用某个Square_1加密过的密文C(假设明文是M1),同时传给B的还有一个Seed,但是Seed恢复出来的Square_2与Sqare_1不同,就无法保证B可以将C还原了。
這裏,我之前解釋的不是很清楚,讓你誤解,對不起。
我再說明清楚一點:
A) 我所謂的不是一一對應,當然不成立,它一定是一一對應的關係。
B) 這麼說好了,以 6 by 6 magic square 為例子,第一個 case 就沒有符合“ 大於1” 的法則,我在第二個 case 才給出另一個 6 by 6 magic square。
以 4 by 4 magic square 為例子,它有 880 種,對於每四個角落的值( 4 corner value) 都只出現過一次,這是不是真的?我也不知道。若是真的,則符合 A) 點,若不為真,則與 A) 矛盾。
C) 表面上看來,“大於1”的法則,並不能完全適用在全部的 magic square;至少我發現在,有好幾組 5 by 5 magic square 上,不符合 “大於1”法則,但確實是一個 normal type 的 5 by 5 magic square。
產生 normal type 的 magic square 有 N 種 algorithm,我也知道其中幾種 algorithm,而我所知道的那些 algorithm,是符合 “大於1”法則的。
以下我給出 5 by 5 不是 “大於1” 的法則。
既然不符合這個法則,那它四個 corner value 當然就不能做為 seeds,可是它依然還是一個 5 by 5 的 normal type magic square。
理論上,我們可以假設 Sender send 一個 4 by 4 magic square's seeds (parameters) 給 Receiver,當 Receiver 收到 seeds 時,他會根據 seeds 去產生一個跟 Sender 一模一樣的 4 by 4 magic square。
這樣的假設很合理,但不實際。
Why?
因為, Receiver 要知道所有 880 種的 Algorithm,這本身就是一個大問題。
以 Computer 來說,如何 stored 880 種的 Algorithm? 對 memory space /disk space 等都是困難的工作。
因此,去除這些不符合 “大於1”法則的,某方面是可以解決 memory space/disk space 的難題。
可是又發生一個新問題,什麼問題?
這樣可能就 insecure。
所以,我才會用 兩道關卡 stream cipher 及 magic square 一起使用。取 stream cipher 及 magic square 它們各自的特性來做成一個很 practical 的 software encryption/decryption.
上传的附件:
能力值:
( LV2,RANK:10 )
13 楼
数学很神奇,不禁回想起了93年6.1买的十万个为什么数学卷里的“河图、洛书、百子图”^_^