資源簡介
MH背包密碼算法算法原理與C語言實現
運行環境:WINDOWS下VC6.0及以上編程工具
運行方式:(1)WINDOWS下VC6.0及以上編程工具編譯鏈接運行
(2)工程文件夾下Debug下的*.exe

代碼片段和文件信息
#include
#include
#include
#include
#define?p_num?5?????????????????//定義加密的0-1序列位數為p_num可以相應的更改
void?increase(int?numlong?a[])????//num為超遞增數列的個數,數組a為存放生成的結果,且數組中只有0num-1是有用數
{
int?isum;
????a[0]=1+rand()%num;
????sum=a[0];
????for(i=1;i {?
????a[i]=sum+1+rand()%num;
????????sum=sum+a[i];
}
}
//求一個數w在MOD?N?下的逆元w-1函數;
int?inv(int?xinint?n0)????????//求xin*xin-1=1?mod?n0
{
long?n1n2qrb1b2t;
????if(xin==0)
???????b2=0;
????else
{?
n1=n0;n2=xin;b2=1;b1=0;
????????do{
r=(n1%n2);
????????????q=(n1-r)/n2;
????????????if(r==0)
{
if(b2<0)?b2=n0+b2;
}
????????????else
{
n1=n2;
n2=r;
????????????t=b2;
????????????b2=b1-q*b2;
b1=t;
}
}while(r!=0);
????}
return(b2);
}
//求兩個數的最大公約數函數,該函數可用于檢測兩個數是否互素;
int?gcd(long?along?b)
{
long?t;
????t=a;
????while(!((a%t==0)&&(b%t==0)))?t--;
????return?t;??????????????????????????//t=1時,a與b互素,否則不互素。
}
//整數N和w選擇函數;
void?select_n_w(int?numlong?s[]int?b[])?????/*?num為超遞增的個數數組s為調用時傳超遞增數組的地址,
?????????????????????????????????????????數組b為存放N和w其中b[0]存放Nb[1]存放w???*/
{
????b[0]=2*s[num-1]+rand()%num+1;???????//b[0]存放N,作為模數N
????while(1)?????????????????????????????//在1~9999的范圍內尋找合適的乘數w
{
b[1]=rand()%9999+1;??????????????//w作為乘數,小于9999,存放在b[1]中
if(gcd(b[1]b[0])==1)?break;?????//w與N互素
???}
}
??????????
//主函數實現
void?main()
{
int?p_text[p_num]={0}inv_p_text[p_num]={0};?//為了方便演示,p_test[p_num]為既定賦值,實際中可以更改
long?sk[p_num]={0}pk[p_num]={0}b[2]={01};
int?wNij=0;
long?inv_w;
unsigned?__int64?tempmidtemp1temp2;
long?c_text=0;
clock_t?t_startt_end;
printf(“請輸入%d位的0-1明文信息序列(0-1代碼以“,”隔開):\n“p_num);???????//明文輸入提示為0-1序列
for(i=0;i {
scanf(“%d“&p_text[i]);
}
//記錄程序運行時間開始
t_start=clock();
printf(“\n**********************$演示程序開始$**********************\n“);
printf(“輸入的%d位0-1明文信息序列為:\n“p_num);
for(i=0;i {
printf(“%d“p_text[i]);
}
printf(“\n“);
//私鑰sk[]-超遞增序列的生成存放在sk[]中
increase(p_numsk);
printf(“生成的私鑰序列為:“);
for(j=0;j {
printf(“%d?“sk[j]);
}
printf(“\n“);
//選擇合適的模數N和乘數w存放在b[2]中
select_n_w(p_numskb);
w=b[1];N=b[0];
printf(“乘數w=%d模數N=%d“wN);
//求乘數w關于模數N的逆元w^(-1);
inv_w=inv(wN);
printf(“乘數w關于模數N的逆元inv_w=%d\n“inv_w);
//通過M-H變換求出公鑰pk[]
for(j=0;j {
mid=w*sk[j];
pk[j]=mid%N;
}
printf(“生成的公鑰序列為:“);
for(j=0;j {
printf(“%d??“pk[j]);
}
printf(“\n“);
//加密方案的實現過程
for(i=0;i {
c_text+=pk[i]*p_text[i];
}
//輸出加密后的密文
printf(“加密后的密文形式為:%ld\n“c_text);
//解密方案的實現過程與輸出結果
temp1=inv_w%N;
//temp=(inv_w*c_text)%N;???????????????????????//測試程序所用
//printf(“inv_w%N=%ld\n“temp1);
temp2=c_text%N;
//printf(“c_text%N=%ld\n“temp2);
temp=temp1*temp2;?
//printf(“temp=%I64d\n“temp);
temp=temp%N;
//print
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2299??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\0-1序列分組.txt
?????文件??????58368??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.bsc
?????文件?????184480??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.exe
?????文件?????188380??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.ilk
?????文件??????11423??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.obj
?????文件??????10719??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.obj.enc
?????文件?????199400??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.pch
?????文件?????476160??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.pdb
?????文件??????10951??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\MH.sbr
?????文件??????66560??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\vc60.idb
?????文件??????69632??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\Debug\vc60.pdb
?????文件???????3870??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.c
?????文件???????3351??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.dsp
?????文件????????512??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.dsw
?????文件??????66560??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.ncb
?????文件??????53760??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.opt
?????文件????????828??2013-10-09?16:18??第五章??MH背包密碼算法算法原理與實現\MHbag_01代碼_加密解密\MH.plg
?????文件??????58368??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.bsc
?????文件?????237730??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.exe
?????文件?????261876??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.ilk
?????文件??????17639??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.obj
?????文件??????10719??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.obj.enc
?????文件?????211060??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.pch
?????文件?????558080??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.pdb
?????文件??????10951??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\MH.sbr
?????文件??????74752??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\vc60.idb
?????文件??????69632??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\Debug\vc60.pdb
?????文件???????6958??2013-10-09?16:20??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\MH.c
?????文件???????3351??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\MH.dsp
?????文件????????512??2013-10-07?18:07??第五章??MH背包密碼算法算法原理與實現\MHbag_文件讀取_加密解密\MH.dsw
............此處省略12個文件信息
評論
共有 條評論