請熟悉混沌原理和c高手幫個忙 (轉)
小弟畢業設計做的是“混沌同步原理在保密通訊中的應用及開發”,由於功底不夠,現在在c語言程式設計上遇到了問題,不解決的話便難以往下作.希望大家有一點頭緒都我告訴我,e:">gdlc@163.net。千萬個thanks!
混沌學的核心是“蝴蝶效應”(蝴蝶效應的意思是說:北京的一隻蝴蝶扇動一下翅膀,會引起紐約的一場風暴),這隻蝴蝶演繹的圖形在科學上被稱作洛倫茲吸引子,是由下面的一個非線性方程組決定的:
dx/dt=-ax+ay
dy/dt=-xz+bx-y
dz/dt=xy-cz
(a,b,c為引數)
我們可以用數值方法求解這個方程組,我採用了尤拉法,這樣可以取出一系列的數,其中x在-25到+25
之間,作為我們的保密訊號。
我先作的是靜態,也就是加密端和端訊號相同,如下:
加密端:
#include
#include
#include
#include
#include
main()
{
FILE *fp1,*fp2;
char in_fname[30];/*輸入要加密的名*/
char out_fname[30];/*輸入加密後的檔名*/
float ch;
float x0=1,y0=1,z0=1;/*初值 */
float a=16.0,b=45.92,c=4.0;
float x,y,z;
float T=0.00001;/*尤拉法中所取的步長*/
printf("n請輸入要加密的檔名:n");
gets(in_fname);/*得到要加密的檔名*/
printf("請輸入加密後的檔名:n");
gets(out_fname);/*得到加密後要的檔名*/
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot open in-file.n");
exit(1);/*如果不能開啟要加密的檔案,便退出程式*/
}
fp2=fopen(out_fname,"wb");
if(fp2==NULL)
{
printf("cannot open or create out-file.n");
exit(1);/*如果不能建立加密後的檔案,便退出*/
}
/*加密演算法開始*/
while(!feof(fp1))
{ch=fgetc(fp1);
x=x0+T*a*y0-T*a*x0;
y=y0+T*b*x0-T*x0*z0-T*y0;
z=z0+T*x0*y0-T*c*z0;
fputc(ch+x,fp2);/*相加後寫入fp2檔案*/
x0=x;
y0=y;
z0=z;
}
fclose(fp1);
fclose(fp2);
}
解密端只需把 fputc(ch+x,fp2)該為 fputc(ch-x,fp2)即可,靜態只是在加密端把檔案加上一組數,然後
在解密端把這組數減去,不涉及過多的程式問題,因此很好實現。
而在動態同步加密時我開始遇到問題,同步時解密端作以下改動:dx/dt=-ax+ay,dy/dt=-sz+bs-y
,dz/dt=sy-cz (a,b,c為引數),即dy/dt dz/dt中的x用s取代,s是加密後得到的檔案。
加密端程式不變,解密端為:
#include
#include
#include
#include
#include
main()
{
FILE *fp1,*fp2;
char in_fname[30];/*輸入要解密的檔名*/
char out_fname[30];/*輸入解密後的檔名*/
float ch;
float x0=1,y0=1,z0=1;
float a=16.0,b=45.92,c=4.0;
float x,y,z;
float T=0.00001;
printf("n請輸入要解密的檔名:n");
gets(in_fname);/*得到要解密的檔名*/
printf("請輸入解密後的檔名:n");
gets(out_fname);/*得到解密後要的檔名*/
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot open in-file.n");
exit(1);/*如果不能開啟要解密的檔案,便退出程式*/
}
fp2=fopen(out_fname,"wb");
if(fp2==NULL)
{
printf("cannot open or create out-file.n");
exit(1);/*如果不能建立解密後的檔案,便退出*/
}
/*解密演算法開始*/
while(!feof(fp1))
{ch=fgetc(fp1);
x=x0+T*a*y0-T*a*x0;
y=y0+T*b*ch-T*c*ch*z0-T*y0;
z=z0+T*ch*y0-T*c*z0;
fputc(ch-x,fp2);/*相減後寫入fp2檔案*/
x0=x;
y0=y;
z0=z;
}
fclose(fp1);
fclose(fp2);
}
無法把原檔案恢復,我想有以下幾個原因:1、處理檔案方法有錯(改為fread、fwrite?);2、演算法不合理,解密端所取的數肯定有誤差,其實我認為異或法最好,但課題為混沌同步,沒辦法。
請各位指點一下啦!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987889/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 請高手幫忙!
- 熟悉ibatis的請幫幫忙!BAT
- 急!!請高手幫忙
- jbuilder高手請幫忙UI
- 請各位高手幫忙!
- NIO Socket的2個問題?請高手幫忙!
- 請高手幫幫忙,給點兒資訊也行
- 各位高手請幫忙,不勝感激!!!!
- 高手幫忙
- 高手幫忙!
- 高手請幫忙看看小弟寫的這個web service:Web
- 一個郵件的JAVABEAN問題,請高手幫忙JavaBean
- 紅旗5.0的安裝問題。請高手幫忙(轉)
- 急,高手幫忙!
- 有關javaAPI,請各位高手幫忙,拜謝JavaAPI
- 請高手幫忙分析一個JSP小程式的問題JS
- 需要高手幫忙~~
- 實在是解決不了,請各位高手幫忙
- 請高手幫忙了,關於javamail的問題JavaAI
- 請教關於jive原始碼,請各位高手幫忙 ,謝謝!!!原始碼
- 麻煩各位高手幫忙
- 急!!!高手來幫忙呀!!
- 急!!!高手快來幫忙!!!
- 高手幫忙,超大普通錶轉分割槽表?
- 請高手幫忙,關於多個連線的hibernate配置問題
- RMI物件繫結到JNDI的問題,請高手幫忙!物件
- 關於反射的問題,請高手幫忙!線上急等!反射
- 關於digest認證的問題,請高手幫忙
- 一個寫xml的問題,高手幫忙啊!XML
- 高手、板主幫忙,一個加密的問題!!!加密
- 安裝出錯,請幫忙看看(轉)
- java學習中遇到的問題 請高手幫忙 線上等Java
- 請各路高手幫忙,關於JAVA NIO的方面的問題Java
- 想做一個LRU的cache,不知道該怎麼實現,高手請幫忙
- synchronized關鍵字問題?各位高手,幫幫忙!synchronized
- 業務平臺的開發(高手們幫幫忙!)
- 安裝時提示錯誤,請高手幫忙解決一下
- 各位高手幫幫忙吧!servlet多執行緒問題,詳細內容請進!!!Servlet執行緒