青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Fourth Dimension Space

枯葉北風(fēng)寒,忽然年以殘,念往昔,語(yǔ)默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

#

神奇的二叉排序樹

     摘要: /**///////////////////////////////////////////////////////////////////////////////                   &nbs...  閱讀全文

posted @ 2009-04-21 00:58 abilitytao 閱讀(1498) | 評(píng)論 (1)編輯 收藏

南航4.18省賽A題 解題報(bào)告

原題:

                                                                                                   城市規(guī)劃

時(shí)間限制(普通/Java):1000MS/3000MS          運(yùn)行內(nèi)存限制:65536KByte
總提交:75            測(cè)試通過:13

描述

NanJing準(zhǔn)備開發(fā)一片荒地,目前已經(jīng)規(guī)劃好了一些居民點(diǎn),還要建設(shè)道路。由于經(jīng)費(fèi)問題,現(xiàn)在想在保持任意兩點(diǎn)間的距離最短的前提下,用盡可能少的經(jīng)費(fèi)把這些點(diǎn)連接起來。需要注意的是并不是任意兩個(gè)居民點(diǎn)間都能直接相連。現(xiàn)在給出兩兩居民點(diǎn)間的花費(fèi),當(dāng)然了,花費(fèi)和路徑長(zhǎng)度成正比~

 

輸入

第一行是個(gè)N<=100,表示N個(gè)居民點(diǎn)。

下面是個(gè)N*N的矩陣,第i行第j列,表示ij的花費(fèi),可能有負(fù)數(shù),表示兩地不相連。保證有解。

 

輸出

輸出一行為總花費(fèi)。

 

樣例輸入

3
0 2 1
2 0 3
1 3 0

樣例輸出

3

提示

這里建設(shè)12 13這兩條路。




剛拿到這道題還以為是floyd,仔細(xì)看看才發(fā)現(xiàn)發(fā)現(xiàn)原來不是。
題目中說要保證每個(gè)頂點(diǎn)之間的距離最短,也就是說在某個(gè)源點(diǎn)到其他點(diǎn)的最短路徑上的通路必須保留,其余的邊可以濾去;
我的第一個(gè)想法是不斷的調(diào)用DIJ把每個(gè)點(diǎn)到其他點(diǎn)的最短路求出來,不過這樣有的邊會(huì)被重復(fù)加。
后來又有了第二個(gè)想法,就是用一個(gè)二維矩陣做為標(biāo)志,如果這條邊(u,v)已經(jīng)被訪問過,那么map[u][v]置成1,這樣便解決了重復(fù)添加的問題。
這樣應(yīng)該對(duì)了吧?我當(dāng)時(shí)也是這樣認(rèn)為的,可惜結(jié)果不然。
如果兩點(diǎn)間有兩條最短路同時(shí)存在的情況,該怎么辦呢?由于DIJ每一次循環(huán)都會(huì)找到一條最短路徑,那么當(dāng)用這個(gè)確定點(diǎn)去更新其他點(diǎn)的信息時(shí),要使用dis[mark]+map[mark][i]<=di[i]而不是<,這樣當(dāng)出現(xiàn)兩條或者兩條以上的最短路路時(shí)會(huì)優(yōu)先選擇已經(jīng)選擇過的點(diǎn),這樣便解決了優(yōu)先權(quán)的問題。
好了,經(jīng)歷的這三個(gè)步驟,代碼終于AC.呵呵 (Wa了四次)

#include<iostream>
#include
<algorithm>
using namespace std;
#define MAX 101
#define MAX_INT 999999999


int mymap[MAX][MAX];
int visit[MAX];
int dis[MAX];
int pre[MAX];
int record[MAX][MAX];
int n;




int  Dij_plus(int s)
{
    
int result=0;
    memset(visit,
0,sizeof(visit));
    memset(pre,
0,sizeof(pre));
    
int i,j;
    
for(i=1;i<=n;i++)
    
{
        dis[i]
=mymap[s][i];
    }

    visit[s]
=1;
    
int temp=MAX_INT;
    
int mark;
    
for(i=1;i<=n;i++)
        pre[i]
=-1;
    
for(i=1;i<=n;i++)
    
{
        
        
if(visit[i]!=1&&mymap[s][i]!=MAX_INT)
            pre[i]
=s;
    }

    
    
for(j=1;j<=n-1;j++)
    
{
        temp
=MAX_INT;
        
for(i=1;i<=n;i++)
        
{
            
            
if(visit[i]!=1&&dis[i]<temp)
            
{
                temp
=dis[i];
                mark
=i;
            }

        }

        visit[mark]
=1;
        
if(record[pre[mark]][mark]==0)
        
{
            record[pre[mark]][mark]
=1;
            record[mark][pre[mark]]
=1;
            result
+=mymap[pre[mark]][mark];
        }


        
for(i=1;i<=n;i++)
        
{
            
            
if(visit[i]!=1&&mymap[mark][i]+dis[mark]<=dis[i])
            
{
                dis[i]
=mymap[mark][i]+dis[mark];
                pre[i]
=mark;
            }

            
        }

    }

    
return result;
}


int main ()
{

    
int i,j;
    
int result=0;
    scanf(
"%d",&n);
    
for(i=1;i<=n;i++)
    
{
        
for(j=1;j<=n;j++)
        
{

            
int temp;
            scanf(
"%d",&temp);
            
if(temp<0)
            
{
                mymap[i][j]
=MAX_INT;
                mymap[j][i]
=MAX_INT;
                
continue;
            }

            mymap[i][j]
=temp;
            mymap[j][i]
=temp;

        }

    }

    
for(i=1;i<=n;i++)
    
{

        result
+=Dij_plus(i);
    }

    printf(
"%d\n",result);
    system(
"pause");
    
return 0;
}
 



posted @ 2009-04-19 19:15 abilitytao 閱讀(1312) | 評(píng)論 (2)編輯 收藏

數(shù)據(jù)結(jié)構(gòu)作業(yè)之——Dijkstra算法 鄰接表向量實(shí)現(xiàn)(求最短路徑及具體走法)

     摘要: #include<iostream>#include<algorithm>#include<cstdio>#include<stack>#include<vector>using namespace std;#define  MAX_DOTNUM 1000#define MAX_...  閱讀全文

posted @ 2009-04-17 22:33 abilitytao 閱讀(3105) | 評(píng)論 (0)編輯 收藏

數(shù)據(jù)結(jié)構(gòu)作業(yè)之——Dijkstra算法鄰接矩陣實(shí)現(xiàn)(求最短路徑及具體走法)

 

//Get Guidence By Mr Zhong Hong
#include<iostream>
#include
<algorithm>
#include
<cstdio>
#include
<stack>
using namespace std;
#define  MAX_DOTMUN 1000
#define MAX_INT 999999999

int visit[MAX_DOTMUN];
int dis[MAX_DOTMUN];
int mymap[MAX_DOTMUN][MAX_DOTMUN];
int pre[MAX_DOTMUN];
int n;
stack
<int>mystack;




void Dij_plus(int s)
{
    memset(visit,
0,sizeof(visit));
    memset(pre,
0,sizeof(pre));
    
int i,j;
    
for(i=1;i<=n;i++)
    
{
        dis[i]
=mymap[s][i];
    }

    visit[s]
=1;
    
int temp=MAX_INT;
    
int mark;
    
for(i=1;i<=n;i++)
        pre[i]
=-1;
    
for(i=1;i<=n;i++)
    
{
        
        
if(visit[i]!=1&&mymap[s][i]!=MAX_INT)
            pre[i]
=s;
    }


    
for(j=1;j<=n-1;j++)
    
{
        temp
=MAX_INT;
        
for(i=1;i<=n;i++)
        
{
            
            
if(visit[i]!=1&&dis[i]<temp)
            
{
                temp
=dis[i];
                mark
=i;
            }

        }

        visit[mark]
=1;
        
for(i=1;i<=n;i++)
        
{

            
if(visit[i]!=1&&mymap[mark][i]+dis[mark]<dis[i])
            
{
                dis[i]
=mymap[mark][i]+dis[mark];
                pre[i]
=mark;
            }


        }

    }

}



int main ()
{
    
int s;
    
int i,j;
    cout
<<"請(qǐng)輸入頂點(diǎn)的數(shù)目:";
    cin
>>n;
    cout
<<"請(qǐng)輸入源點(diǎn)s:";
    cin
>>s;
    
for(i=1;i<=n;i++)
    
{

        
for(j=1;j<=n;j++)
        
{
            
if(i==j)
                mymap[i][j]
=0;
            
else
                mymap[i][j]
=MAX_INT;
        }

    }

    cout
<<"請(qǐng)輸入邊和權(quán),并以0,0,0結(jié)束(u,v,w):"<<endl;
    
for(i=1;;i++)
    
{
        
int u,v,w;
        cout
<<"請(qǐng)輸入第"<<i<<"條邊:";
        cin
>>u>>v>>w;
        
if(u==0&&v==0&&w==0)
            
break;
        mymap[u][v]
=w;
    }

    Dij_plus(s);
    
while(!mystack.empty())
    
{

        mystack.pop();
    }



    
int temp;
    
for(i=1;i<=n;i++)
    
{

        
if(i==s)
            
continue;
        
else if(pre[i]==-1)
        
{

            printf(
"從%d號(hào)點(diǎn)到%d號(hào)點(diǎn)沒有通路\n",s,i);
            
continue;
        }

        printf(
"從%d號(hào)點(diǎn)到%d號(hào)點(diǎn)的通路為:",s,i);
        temp
=i;
        
while(temp!=s)
        
{

            mystack.push(temp);
            temp
=pre[temp];
        }

        mystack.push(s);
        
while(mystack.size()!=0)
        
{
            printf(
"%d ",mystack.top());
            mystack.pop();
        }

        printf(
"\n");
    }

    system(
"pause");
    
return 0;
}





posted @ 2009-04-16 13:45 abilitytao 閱讀(3434) | 評(píng)論 (0)編輯 收藏

二分查找模板(template)

今天上課重新講了二分查找 呵呵 回來寫個(gè)模板用用
//Get Guidance By Mr ZhangHong
#include<iostream>
#include
<cmath>
#include
<algorithm>
using namespace std;


template
<class T>
int b_search(T key,T a[],int size)
{

    
int mid;
    
int front=0;
    
int rear=size-1;
    
while(front<=rear)
    
{

        mid
=(front+rear)/2;
        
if(a[mid]==key)
            
return mid;
        
else if(key>a[mid])
        
{
            front
=mid+1;
            
continue;
        }

        
else if(key<a[mid])
        
{
            rear
=mid-1;
            
continue;
        }

    }

    
if(front>rear)
        
return -1;
}



 
int main ()
{

    
int test[]={1,2,3,4,5,6,7,8,9,10,50,200};
    
int p;
    p
=b_search(13,test,sizeof(test)/sizeof(test[0]));
    cout
<<"該元素位于數(shù)組的第"<<p<<"號(hào)位置"<<endl;
    system(
"pause");
    
return 0;

}

posted @ 2009-04-16 00:17 abilitytao 閱讀(427) | 評(píng)論 (0)編輯 收藏

張宏數(shù)據(jù)結(jié)構(gòu)作業(yè)之-AOE網(wǎng)關(guān)鍵路徑(Activity On Edge)

     摘要:   #include<iostream>#include<cmath>#include<algorithm>#include<stack>#include<fstream>using namespace std;#define MAX 100000struct node{&nb...  閱讀全文

posted @ 2009-04-14 18:55 abilitytao 閱讀(2646) | 評(píng)論 (3)編輯 收藏

POJ 300題紀(jì)念

呵呵 今天過了POJ300題 心情還不錯(cuò) 以后要再接再厲哦:-)

posted @ 2009-04-11 21:22 abilitytao 閱讀(307) | 評(píng)論 (4)編輯 收藏

POJ 1511-Invitation Cards(SPFA算法)

     摘要: 今天終于用SPFA寫出了第一個(gè)程序,感覺收獲很大,從Dij到Floyed再到Bellmen,以及今天的SPFA,每一種算法背后都蘊(yùn)藏著許多值得思考的地方。正因?yàn)檠芯苛怂鼈儯攀沟梦业哪芰Σ粩嗟孬@得了提高。之前以為SPFA做為最短路問題最快的算法,想必代碼定不好寫,不過今天研究過才知道,SPFA的代碼量遠(yuǎn)遠(yuǎn)不及Dij,這著實(shí)令人驚嘆,原來最好的算法SPFA是如此的好寫,呵呵 我想此算法在很大程度上可...  閱讀全文

posted @ 2009-04-11 00:51 abilitytao 閱讀(2820) | 評(píng)論 (2)編輯 收藏

RSA算法(轉(zhuǎn))

它是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經(jīng)歷了各種攻擊,至今未被完全攻破。

一、RSA算法 :

首先, 找出三個(gè)數(shù), p, q, r,
其中 p, q 是兩個(gè)相異的質(zhì)數(shù), r 是與 (p-1)(q-1) 互質(zhì)的數(shù)......
p, q, r 這三個(gè)數(shù)便是 private key

接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1).....
這個(gè) m 一定存在, 因?yàn)?r 與 (p-1)(q-1) 互質(zhì), 用輾轉(zhuǎn)相除法就可以得到了.....
再來, 計(jì)算 n = pq.......
m, n 這兩個(gè)數(shù)便是 public key

編碼過程是, 若資料為 a, 將其看成是一個(gè)大整數(shù), 假設(shè) a < n....
如果 a >= n 的話, 就將 a 表成 s 進(jìn)位 (s <= n, 通常取 s = 2^t),
則每一位數(shù)均小於 n, 然後分段編碼......
接下來, 計(jì)算 b == a^m mod n, (0 <= b < n),
b 就是編碼後的資料......

解碼的過程是, 計(jì)算 c == b^r mod pq (0 <= c < pq),
於是乎, 解碼完畢...... 等會(huì)會(huì)證明 c 和 a 其實(shí)是相等的

如果第三者進(jìn)行竊聽時(shí), 他會(huì)得到幾個(gè)數(shù): m, n(=pq), b......
他如果要解碼的話, 必須想辦法得到 r......
所以, 他必須先對(duì) n 作質(zhì)因數(shù)分解.........
要防止他分解, 最有效的方法是找兩個(gè)非常的大質(zhì)數(shù) p, q,
使第三者作因數(shù)分解時(shí)發(fā)生困難.........


<定理>
若 p, q 是相異質(zhì)數(shù), rm == 1 mod (p-1)(q-1),
a 是任意一個(gè)正整數(shù), b == a^m mod pq, c == b^r mod pq,
則 c == a mod pq

證明的過程, 會(huì)用到費(fèi)馬小定理, 敘述如下:
m 是任一質(zhì)數(shù), n 是任一整數(shù), 則 n^m == n mod m
(換另一句話說, 如果 n 和 m 互質(zhì), 則 n^(m-1) == 1 mod m)
運(yùn)用一些基本的群論的知識(shí), 就可以很容易地證出費(fèi)馬小定理的........

<證明>
因?yàn)?rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整數(shù)
因?yàn)樵?modulo 中是 preserve 乘法的
(x == y mod z and u == v mod z => xu == yv mod z),
所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq

1. 如果 a 不是 p 的倍數(shù), 也不是 q 的倍數(shù)時(shí),
則 a^(p-1) == 1 mod p (費(fèi)馬小定理) => a^(k(p-1)(q-1)) == 1 mod p
a^(q-1) == 1 mod q (費(fèi)馬小定理) => a^(k(p-1)(q-1)) == 1 mod q
所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1
即 a^(k(p-1)(q-1)) == 1 mod pq
=> c == a^(k(p-1)(q-1)+1) == a mod pq

2. 如果 a 是 p 的倍數(shù), 但不是 q 的倍數(shù)時(shí),
則 a^(q-1) == 1 mod q (費(fèi)馬小定理)
=> a^(k(p-1)(q-1)) == 1 mod q
=> c == a^(k(p-1)(q-1)+1) == a mod q
=> q | c - a
因 p | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod p
=> p | c - a
所以, pq | c - a => c == a mod pq

3. 如果 a 是 q 的倍數(shù), 但不是 p 的倍數(shù)時(shí), 證明同上

4. 如果 a 同時(shí)是 p 和 q 的倍數(shù)時(shí),
則 pq | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod pq
=> pq | c - a
=> c == a mod pq
Q.E.D.


這個(gè)定理說明 a 經(jīng)過編碼為 b 再經(jīng)過解碼為 c 時(shí), a == c mod n (n = pq)....
但我們?cè)谧鼍幋a解碼時(shí), 限制 0 <= a < n, 0 <= c < n,
所以這就是說 a 等於 c, 所以這個(gè)過程確實(shí)能做到編碼解碼的功能.....

二、RSA 的安全性

RSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因?yàn)闆]有證明破解 RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA 的一些變種算法已被證明等價(jià)于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法。現(xiàn)在,人們已能分解多個(gè)十進(jìn)制位的大素?cái)?shù)。因此,模數(shù)n 必須選大一些,因具體適用情況而定。

三、RSA的速度

由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上倍,無論是軟件還是硬件實(shí)現(xiàn)。速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù)加密。

四、RSA的選擇密文攻擊

RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實(shí)體簽署。然后,經(jīng)過計(jì)算就可得到它所想要的信息。實(shí)際上,攻擊利用的都是同一個(gè)弱點(diǎn),即存在這樣一個(gè)事實(shí):乘冪保留了輸入的乘法結(jié)構(gòu):

( XM )^d = X^d *M^d mod n

前面已經(jīng)提到,這個(gè)固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個(gè)人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實(shí)體不對(duì)其他實(shí)體任意產(chǎn)生的信息解密,不對(duì)自己一無所知的信息簽名;另一條是決不對(duì)陌生人送來的隨機(jī)文檔簽名,簽名時(shí)首先使用One-Way HashFunction 對(duì)文檔作HASH處理,或同時(shí)使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。

五、RSA的公共模數(shù)攻擊

若系統(tǒng)中共有一個(gè)模數(shù),只是不同的人擁有不同的e和d,系統(tǒng)將是危險(xiǎn)的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質(zhì),那末該信息無需私鑰就可得到恢復(fù)。設(shè)P為信息明文,兩個(gè)加密密鑰為e1和e2,公共模數(shù)是n,則:

C1 = P^e1 mod n

C2 = P^e2 mod n

密碼分析者知道n、e1、e2、C1和C2,就能得到P。

因?yàn)閑1和e2互質(zhì),故用Euclidean算法能找到r和s,滿足:

r * e1 + s * e2 = 1

假設(shè)r為負(fù)數(shù),需再用Euclidean算法計(jì)算C1^(-1),則

( C1^(-1) )^(-r) * C2^s = P mod n

另外,還有其它幾種利用公共模數(shù)攻擊的方法。總之,如果知道給定模數(shù)的一對(duì)e和d,一是有利于攻擊者分解模數(shù),一是有利于攻擊者計(jì)算出其它成對(duì)的e’和d’,而無需分解模數(shù)。解決辦法只有一個(gè),那就是不要共享模數(shù)n。

RSA的小指數(shù)攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會(huì)使加密變得易于實(shí)現(xiàn),速度有
所提高。但這樣作是不安全的,對(duì)付辦法就是e和d都取較大的值。

RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學(xué)界多數(shù)人士?jī)A向于因子分解不是NPC問題。 RSA的缺點(diǎn)主要有:A)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。B)分組長(zhǎng)度太大,為保證安全性,n 至少也要 600 bits 以上,使運(yùn)算代價(jià)很高,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí);且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長(zhǎng)度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目前,SET( Secure Electronic Transaction )協(xié)議中要求CA采用比特長(zhǎng)的密鑰,其他實(shí)體使用比特的密鑰。

posted @ 2009-04-10 01:39 abilitytao 閱讀(452) | 評(píng)論 (0)編輯 收藏

從《暗算》看密碼學(xué)(轉(zhuǎn))

前一陣子看了電視劇《暗算》,蠻喜歡它的構(gòu)思和里面的表演。其中有一個(gè)故事提到了密碼學(xué),故事本身不錯(cuò),但是有點(diǎn)故弄玄虛。不過有一點(diǎn)是對(duì)的,就是當(dāng)今的密碼學(xué)是以數(shù)學(xué)為基礎(chǔ)的。(沒有看過暗算的讀者可以看一下介紹,http://ent.sina.com.cn/v/2005-10-17/ba866985.shtml
因?yàn)槲覀兒竺嬉啻翁岬竭@部電視劇。)

密碼學(xué)的歷史大致可以推早到兩千年前,相傳名將凱撒為了防止敵方截獲情報(bào),用密碼傳送情報(bào)。凱撒的做法很簡(jiǎn)單,就是對(duì)二十幾個(gè)羅馬字母建立一張對(duì)應(yīng)表,比如說
    


這樣,如果不知道密碼本,即使截獲一段信息也看不懂,比如收到一個(gè)的消息是 EBKTBP,那么在敵人看來是毫無意義的字,通過密碼本解破出來就是 CAESAR 一詞,即凱撒的名字。這種編碼方法史稱凱撒大帝。當(dāng)然,學(xué)過信息論的人都知道,只要多截獲一些情報(bào),統(tǒng)計(jì)一下字母的頻率,就可以解破出這種密碼。柯藍(lán)道爾在他的“福爾摩斯探案集”中“跳舞的小人”的故事里已經(jīng)介紹了這種小技巧。在很長(zhǎng)時(shí)間里,人們?cè)噲D找到一些好的編碼方法使得解密者無法從密碼中統(tǒng)計(jì)出明碼的統(tǒng)計(jì)信息,但是,基本上靠經(jīng)驗(yàn)。有經(jīng)驗(yàn)的編碼者會(huì)把常用的詞對(duì)應(yīng)成多個(gè)密碼, 使得破譯者很難統(tǒng)計(jì)出任何規(guī)律。比如,如果將漢語(yǔ)中的“是”一詞對(duì)應(yīng)于唯一一個(gè)編碼 0543,那么破譯者就會(huì)發(fā)現(xiàn) 0543 出現(xiàn)的特別多。但如果將它對(duì)應(yīng)成十個(gè)密碼 0543,3737,2947 等等,每次隨機(jī)的挑一個(gè)使用,每個(gè)密碼出現(xiàn)的次數(shù)就不會(huì)太多,而且破譯者也無從知道這些密碼其實(shí)對(duì)應(yīng)一個(gè)字。這里面雖然包含著樸素的概率論的原理,但是并不科學(xué)化。另外,好的密碼必須做到不能根據(jù)已知的明文和密文的對(duì)應(yīng)推斷出新的密文的內(nèi)容。歷史上有很多在這方面設(shè)計(jì)得不周到的密碼的例子。在第二次世界大戰(zhàn)中,日本軍方的密碼設(shè)計(jì)就很成問題。美軍破獲了日本很多密碼。在中途島海戰(zhàn)前,美軍截獲的日軍密電經(jīng)常出現(xiàn) AF 這樣一個(gè)地名,應(yīng)該是太平洋的某個(gè)島嶼,但是美軍無從知道是哪個(gè)。于是,美軍就逐個(gè)發(fā)表自己控制的每個(gè)島嶼上的假新聞。當(dāng)美軍發(fā)出“中途島供水系統(tǒng)壞了”這條假新聞后,從截獲的日軍情報(bào)中又看到 AF 供水出來問題的電文,美軍就斷定中途島就是 AF。事實(shí)證明判斷正確,美軍在那里成功地伏擊了日本主力艦隊(duì)。

事實(shí)上,在第二次世界大戰(zhàn)中,很多頂尖的科學(xué)家包括提出信息論的香農(nóng)都在為美軍情報(bào).部門工作,而信息論實(shí)際上就是情報(bào)學(xué)的直接產(chǎn)物。香農(nóng)提出信息論后,為密碼學(xué)的發(fā)展帶來了新氣象。根據(jù)信息論,密碼的最高境界是使得敵人在截獲密碼后,對(duì)我方的所知沒有任何增加,用信息論的專業(yè)術(shù)語(yǔ)講,就是信息量沒有增加。一般來講,當(dāng)密碼之間分布均勻并且統(tǒng)計(jì)獨(dú)立時(shí),提供的信息最少。均勻分布使得敵人無從統(tǒng)計(jì),而統(tǒng)計(jì)獨(dú)立能保證敵人即使看到一段密碼和明碼后,不能破譯另一段密碼。這也是《暗算》里傳統(tǒng)的破譯員老陳破譯的一份密報(bào)后,但無法推廣的原因,而數(shù)學(xué)家黃依依預(yù)見到了這個(gè)結(jié)果,因?yàn)樗罃橙诵碌拿艽a系統(tǒng)編出的密文是統(tǒng)計(jì)獨(dú)立的。有了信息論后,密碼的設(shè)計(jì)就有了理論基礎(chǔ),現(xiàn)在通用的公開密鑰的方法,包括《暗算》里的“光復(fù)一號(hào)”密碼,就是基于這個(gè)理論。

公開密鑰的原理其實(shí)很簡(jiǎn)單,我們以給上面的單詞 Caesar 加解密來說明它的原理。我們先把它變成一組數(shù),比如它的 Ascii 代碼 X=099097101115097114(每三位代表一個(gè)字母)做明碼。現(xiàn)在我們來設(shè)計(jì)一個(gè)密碼系統(tǒng),對(duì)這個(gè)明碼加密。

1,找兩個(gè)很大的素?cái)?shù)(質(zhì)數(shù))P 和 Q,越大越好,比如 100 位長(zhǎng)的, 然后計(jì)算它們的乘積 N=P×Q,M=(P-1)×(Q-1)。

2,找一個(gè)和 M 互素的整數(shù) E,也就是說 M 和 E 除了 1 以外沒有公約數(shù)。

3,找一個(gè)整數(shù) D,使得 E×D 除以 M 余 1,即 E×D mod M = 1。

現(xiàn)在,世界上先進(jìn)的、最常用的密碼系統(tǒng)就設(shè)計(jì)好了,其中 E 是公鑰誰都可以用來加密,D 是私鑰用于解密,一定要自己保存好。乘積 N 是公開的,即使敵人知道了也沒關(guān)系。

現(xiàn)在,我們用下面的公式對(duì) X 加密,得到密碼 Y。
    


好了,現(xiàn)在沒有密鑰 D,神仙也無法從 Y 中恢復(fù) X。如果知道 D,根據(jù)費(fèi)爾馬小定理,則只要按下面的公式就可以輕而易舉地從 Y 中得到 X。
    


這個(gè)過程大致可以概況如下:
    


公開密鑰的好處有:

1.簡(jiǎn)單。

2.可靠。公開密鑰方法保證產(chǎn)生的密文是統(tǒng)計(jì)獨(dú)立而分布均勻的。也就是說,不論給出多少份明文和對(duì)應(yīng)的密文,也無法根據(jù)已知的明文和密文的對(duì)應(yīng)來破譯下一份密文。更重要的是 N,E 可以公開給任何人加密用,但是只有掌握密鑰 D 的人才可以解密, 即使加密者自己也是無法解密的。這樣,即使加密者被抓住叛變了,整套密碼系統(tǒng)仍然是安全的。(而凱撒大帝的加密方法有一個(gè)知道密碼本的人泄密,整個(gè)密碼系統(tǒng)就公開了。)

3.靈活,可以產(chǎn)生很多的公開密鑰E和私鑰D的組合給不同的加密者。

最后讓我們看看破解這種密碼的難度。首先,要聲明,世界上沒有永遠(yuǎn)破不了的密碼,關(guān)鍵是它能有多長(zhǎng)時(shí)間的有效期。要破公開密鑰的加密方式,至今的研究結(jié)果表明最好的辦法還是對(duì)大字 N 進(jìn)行因數(shù)分解,即通過 N 反過來找到 P 和 Q,這樣密碼就被破了。而找 P 和 Q 目前只有用計(jì)算機(jī)把所有的數(shù)字試一遍這種笨辦法。這實(shí)際上是在拼計(jì)算機(jī)的速度,這也就是為什么 P 和 Q 都需要非常大。一種加密方法只有保證 50 年計(jì)算機(jī)破不了也就可以滿意了。前幾年破解的 RSA-158 密碼是這樣因數(shù)分解的

395058745832651445264197678006144819960207764603049364541393760515793556265294
50683609727842468219535093544305870490251995655335710209799226484977949442955603
= 3388495837466721394368393204672181522815830368604993048084925840555281177 ×11658823406671259903148376558383270818131012258146392600439520994131344334162924536139

現(xiàn)在,讓我們回到《暗算》中,黃依依第一次找的結(jié)果經(jīng)過一系列計(jì)算發(fā)現(xiàn)無法歸零,也就是說除不盡,我猜她可能試圖將一個(gè)大數(shù) N 做分解,沒成功。第二次計(jì)算的結(jié)果是歸零了,說明她找到的 N=P×Q 的分解方法。當(dāng)然,這件事能不能用算盤完成,我就不知道了,但我覺得比較夸張。另外我對(duì)該電視劇還有一個(gè)搞不懂的問題就是里面提到的“光復(fù)一號(hào)”密碼的誤差問題。一個(gè)密碼是不能有誤差的,否則就是有的密鑰也無法解碼了。我想可能是指在構(gòu)造密碼時(shí),P 和 Q 之一沒找對(duì),其中一個(gè)(甚至兩個(gè)都)不小心找成了合數(shù),這時(shí)密碼的保密性就差了很多。如果誰知道電視劇里面講的“誤差”是指什么請(qǐng)告訴我。另外,電視劇里提到馮?諾依曼,說他是現(xiàn)代密碼學(xué)的祖宗,我想是弄錯(cuò)了,應(yīng)該是香農(nóng)。馮?諾依曼的貢獻(xiàn)在發(fā)明計(jì)算機(jī)和提出博弈論(game theory)。

不管怎么樣,我們今天用的所謂最可靠的加密方法的數(shù)學(xué)原理其實(shí)就這么簡(jiǎn)單,一點(diǎn)也不神秘,無非是找?guī)讉€(gè)大素?cái)?shù)做一些乘除和乘方運(yùn)算就可以了。

posted @ 2009-04-08 21:51 abilitytao 閱讀(548) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共42頁(yè): First 31 32 33 34 35 36 37 38 39 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品一区二区三区不卡| 久久影视精品| 一本色道综合亚洲| 欧美裸体一区二区三区| 亚洲日本电影| 一本久道久久综合婷婷鲸鱼| 久久久高清一区二区三区| 亚洲人人精品| 亚洲欧美日韩综合aⅴ视频| 黑丝一区二区| 亚洲电影网站| 欧美精品18+| 一本色道久久综合亚洲精品不 | 久久综合伊人| 亚洲国产经典视频| 欧美体内she精视频在线观看| 99re6这里只有精品| 欧美久久99| 亚洲在线视频观看| 欧美fxxxxxx另类| 在线一区观看| 狠狠色丁香婷婷综合影院| 欧美国产日韩在线| 另类激情亚洲| 欧美在线视频观看| 在线电影欧美日韩一区二区私密| 欧美精品999| 欧美一区二区久久久| 亚洲国产日韩在线| 欧美一区久久| 这里只有精品在线播放| 国产视频久久| 欧美视频一区在线| 另类欧美日韩国产在线| 一区二区三区国产精华| 欧美成人精品| 久久精品中文| 亚洲一区二区三区中文字幕在线| 韩国福利一区| 欧美视频手机在线| 久久久久国产精品人| 亚洲视频一区二区| 日韩五码在线| 亚洲国产成人porn| 久久久久免费视频| 亚洲在线视频网站| 夜夜躁日日躁狠狠久久88av| 国语自产精品视频在线看一大j8 | 久久精品国产欧美激情| 亚洲精品乱码久久久久久久久| 久久综合网hezyo| 久久精品国产91精品亚洲| 亚洲一区免费在线观看| 中日韩男男gay无套| av不卡在线观看| 99re这里只有精品6| 亚洲欧洲一区| 亚洲精品国精品久久99热一| 亚洲高清资源| 亚洲人成在线观看| 亚洲国产精品久久久久秋霞影院 | 欧美va天堂va视频va在线| 亚洲欧美中文日韩在线| 一区二区三区 在线观看视| 亚洲精品精选| 99精品国产在热久久婷婷| 亚洲精品一二区| 99re热这里只有精品视频 | 免费黄网站欧美| 亚洲欧美日韩成人| 亚洲小说区图片区| 亚洲在线免费| 毛片基地黄久久久久久天堂| 久久久水蜜桃av免费网站| 久久精品在线视频| 免费看成人av| 狠狠色狠狠色综合日日tαg| 欧美一区二区三区在| 亚洲天堂男人| 香蕉久久一区二区不卡无毒影院 | 国产精品99久久99久久久二8 | 亚洲精品久久嫩草网站秘色| 99国产精品| 亚洲影院在线观看| 久久精品在线播放| 欧美日韩亚洲一区二区三区在线| 久久婷婷麻豆| 国产一区二区你懂的| 亚洲国产一区二区三区在线播| 99re8这里有精品热视频免费 | 玖玖国产精品视频| 亚洲经典在线看| 日韩一级免费| 久久国产精品99精品国产| 欧美jizz19hd性欧美| 欧美成人dvd在线视频| 欧美精品观看| 久久精品一区二区三区不卡牛牛| 欧美国产精品v| 国产综合久久| 亚洲影音先锋| 欧美成ee人免费视频| 亚洲图片激情小说| 欧美18av| 韩日精品视频| 免费高清在线一区| 亚洲精选91| 可以看av的网站久久看| 国产伦精品一区二区三区照片91| 亚洲精品精选| 玖玖在线精品| 久久精品国产99精品国产亚洲性色| 美女精品在线| 国产日韩欧美在线看| 亚洲午夜一区二区三区| 欧美激情一二三区| 久久久成人精品| 国产综合久久| 久久精品一级爱片| 一区二区三区精品在线| 欧美国产乱视频| 欧美日韩一区二区三区在线看| 国产欧美视频在线观看| 国产精品一区一区| 国产精品99久久久久久久女警 | 在线观看亚洲专区| 国产日韩精品在线| 亚洲欧美日本另类| 亚洲精品之草原avav久久| 欧美成人精品福利| 亚洲国产精品免费| 欧美不卡在线视频| 久久久久免费观看| 亚洲大片一区二区三区| 久久综合导航| 久久综合九色99| 亚洲福利视频一区二区| 欧美成人精品一区| 欧美成熟视频| 夜夜嗨网站十八久久 | 亚洲欧美国产日韩天堂区| 亚洲精品日韩在线观看| 欧美成人日韩| 一区二区欧美激情| 99精品国产在热久久| 欧美午夜精品电影| 欧美伊人久久大香线蕉综合69| 亚洲毛片在线看| 亚洲福利专区| 亚洲国产毛片完整版| 欧美激情综合色| 亚洲午夜视频在线| 亚洲一区视频在线观看视频| 国产伦精品一区二区三区在线观看| 久久av二区| 久久综合中文色婷婷| 日韩一级黄色av| 亚洲一区二区三区777| 国产日本欧美一区二区| 麻豆精品在线观看| 欧美激情一区二区三区在线视频| 亚洲精品免费看| 亚洲一区精品视频| 久久久精品欧美丰满| 亚洲国产成人精品女人久久久| 久久婷婷国产综合尤物精品 | 久久不射2019中文字幕| 亚洲欧美日韩一区在线观看| 亚洲伦理网站| 国产精品综合av一区二区国产馆| 欧美高清一区| 午夜精品福利电影| 99视频一区| 亚洲中字在线| 欧美视频官网| 欧美日韩高清在线播放| 欧美国产大片| 亚洲精品小视频| 这里是久久伊人| 日韩视频在线免费观看| 一本色道久久88精品综合| 国产一区日韩欧美| 欧美成人一区在线| 久久午夜av| 欧美在现视频| 亚洲免费在线播放| 欧美日韩一本到| 亚洲主播在线| 亚洲欧美日韩成人高清在线一区| 亚洲美女av在线播放| 欧美激情日韩| 男人的天堂成人在线| 欧美女同在线视频| 久久久噜噜噜久久久| 在线电影国产精品| 性色av一区二区三区在线观看| 新67194成人永久网站| 久久综合一区二区| 狼人天天伊人久久| 日韩一级精品|